Silverlight Webservice «Удаленный сервер возвратил ошибку: NotFound» - PullRequest
9 голосов
/ 02 мая 2009

У меня есть приложение Silverlight, которое получает список сериализуемых классов. В этих классах есть другие сериализуемые классы, некоторые из которых также есть в списке. Дело в том, что все работает нормально, пока я не заполню один из сериализуемых классов, который заставляет приложение silverlight выдавать исключение «Удаленный сервер возвратил ошибку: NotFound»

Это код, который заполняет класс (не пугайтесь большого количества кода, который просто заполняет класс информацией):

  private SCharacter getSCharacter(Character userCharacter)
        {
            var iqcb = userCharacter.CharacterBodies;
            var iqcs = userCharacter.CharacterStats;
            var iqgs = userCharacter.CharacterSettings;
            var iqcp = userCharacter.CharacterPoints;
            var iqcproj = userCharacter.CharacterProjectiles;

            var currChar = 
                new SCharacter 
                {
                    characterID = userCharacter.characterID,
                    characterName = userCharacter.characterName,
                    characterClassID = userCharacter.characterClassID,
                    userUsername = userCharacter.userUsername
                };
            foreach (var cb in iqcb)
            {
                var scb = new SCharacterBody();
                scb.body.bodyId = cb.bodyId;
                scb.body.bodyName = cb.Body.bodyName;
                scb.bodyPart.bodyPartId = cb.BodyPart.bodyPartId;
                scb.bodyPart.bodyPartName = cb.BodyPart.bodyPartName;
                currChar.characterBodyList.Add(scb);
            }
            foreach (var cs in iqcs)
            {
                var scs = 
                    new SCharacterStat 
                    { 
                          characterID = cs.characterID,
                          statId = cs.statId,
                          characterStatId = cs.characterStatId,
                          statName = cs.Stat.statName,
                          statValue = cs.statValue                           
                    };
                currChar.characterStatList.Add(scs);
            }
            foreach (var igs in iqgs)
            {
                var scs = new SCharacterSetting
                    {
                        characterID = igs.characterID,
                        modifierId = igs.GameSetting.modifierId,
                        modifierType = igs.GameSetting.Modifier.modifierType,
                        characterSettingId = igs.characterSettingId,
                        settingDescription = igs.GameSetting.settingDescription,
                        settingName = igs.GameSetting.settingName,
                        settingValue = igs.GameSetting.settingValue
                    };
                var gss = igs.GameSetting.Stat;
                scs.stat.statId = gss.statId;
                scs.stat.statName = gss.statName;
                currChar.characterSettingList.Add(scs);
            }
            foreach (var cp in iqcp)
            {
                var scp = new SCharacterPoint
                {
                    characterID = cp.characterID,
                    characterPointsId = cp.characterPointsId,
                    pointsId = cp.pointsId,
                    pointsName = cp.Point.pointsName,
                    pointsValue = cp.pointsValue                    
                };
                currChar.characterPointList.Add(scp);
            }

            foreach (var cp in iqcproj)
            {
                var scp = 
                    new SCharacterProjectile 
                    { 
                         characterId = cp.characterId,
                         characterProjectileId = cp.characterProjectileId,
                         particleId = cp.Projectile.particleId,
                         projectileHeight = cp.Projectile.projectileHeight,
                         projectileWidth= cp.Projectile.projectileWidth,
                         damageId =cp.Projectile.damageId,
                         damageDuration = cp.Projectile.Damage.damageDuration,
                         damageValue = cp.Projectile.Damage.damageValue,
                         projectileName = cp.Projectile.projectileName
                    };
                scp.force.forceName = cp.Projectile.forceName;
                scp.force.impulseX = (float)cp.Projectile.Force.impulseX;
                scp.force.impulseY = (float)cp.Projectile.Force.impulseY;
                scp.force.torque = (float)cp.Projectile.Force.torque;

                scp.projectileParticle.particleId = cp.Projectile.particleId;
                scp.projectileParticle.particleName = cp.Projectile.Particle.particleName;

                foreach (var psv in cp.Projectile.Particle.ParticleSettingValues)
                {
                    var spsv = new SParticleSettingValue();
                    spsv.particleId = psv.particleId;
                    spsv.particleSettingID = psv.particleSettingID;
                    spsv.particleSettingName = psv.ParticleSetting.particleSettingName;
                    spsv.particleSettingValue = psv.particleSettingValue1;
                    spsv.particleSettingValuesID = psv.particleSettingValueID;
                    scp.projectileParticle.particleSettingList.Add(spsv);
                }

                foreach (var pc in cp.Projectile.Particle.ParticleColours)
                {
                    var spc = new SParticleColour();
                    spc.colourHex = pc.colourHex;
                    spc.particleColourId = pc.particleColourId;
                    spc.particleId = pc.particleId;
                    scp.projectileParticle.particleColourList.Add(spc);
                }
                currChar.projectileList.Add(scp);
            }
            return currChar; 
        }

В последних 3 строках кода есть currChar.projectileList.Add(scp);, если я удаляю эту строку кода, все работает нормально. То, что я думал, может быть причиной проблемы, это ссылки Circular, но я проверил классы и не могу найти какие-либо. При необходимости я вставлю код классов, которые имеют отношение к projectileList

Обновление: попытался отладить сам веб-сервис и, по-видимому, существует проблема с сериализацией XML, вы можете найти вопрос здесь

Ответы [ 3 ]

13 голосов
/ 02 февраля 2011

В следующий раз вы должны включить трассировку WCF:

Поместите это в свой файл web.config:

<system.diagnostics>    
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\temp\WEBTraces.log" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

Подробнее об этом здесь: http://msdn.microsoft.com/en-us/library/ms733025.aspx

11 голосов
/ 02 мая 2009

Ошибка, которую вы получаете, является общей и может вводить в заблуждение. Проблема в вашем случае может быть связана с тем, что некоторые типы не поддерживаются Silverlight, поэтому не могут быть переданы с использованием WCF.

Чтобы получить более подробную информацию об ошибке, попробуйте воспользоваться бесплатным инструментом Fiddler. Вы можете найти подробное описание того, как использовать его здесь: WCF Essentials - Fiddler

3 голосов
/ 02 мая 2009

Нашел решение моей проблемы в моем втором вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...