2009-05-02 36 views
9

Tôi có một ứng dụng Silverlight truy xuất danh sách các lớp có thể tuần tự hóa. Trong các lớp này có các lớp serializable khác một số trong đó cũng có trong một danh sách. Tất cả mọi thứ hoạt động tốt cho đến khi tôi điền vào một danh sách các lớp có thể tuần tự hóa khiến ứng dụng Silverlight ném ngoại lệ "Máy chủ từ xa trả về lỗi: NotFound"Dịch vụ Web Silverlight "Máy chủ từ xa đã trả về lỗi: NotFound"

Đây là mã điền vào lớp (Don ' t bị đe dọa bởi số lượng lớn các mã nó chỉ điền vào lớp học với thông tin):

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; 
     } 

trong 3 dòng cuối cùng của mã có currChar.projectileList.Add(scp);, nếu tôi loại bỏ dòng mã tất cả mọi thứ hoạt động tốt. Những gì tôi nghĩ có thể gây ra vấn đề là tham khảo ciruclar nhưng tôi đã kiểm tra các lớp và dường như không tìm thấy bất kỳ thứ gì. Nếu cần tôi sẽ dán mã của các lớp học mà phải làm với projectileList

Cập nhật: Cố gắng để gỡ lỗi các webservice bản thân và dường như có một vấn đề với serialization xml, bạn có thể tìm thấy những câu hỏi here

Trả lời

3

Tìm thấy giải pháp cho vấn đề của tôi trong câu hỏi second của tôi.

11

Lỗi bạn nhận được là lỗi chung và có thể gây hiểu nhầm. Sự cố trong trường hợp của bạn có thể liên quan đến thực tế là một số loại không được Silverlight hỗ trợ do đó không thể được chuyển bằng WCF.

Để biết thêm thông tin chi tiết về lỗi, hãy thử sử dụng công cụ miễn phí có tên Fiddler. Bạn có thể tìm thấy mô tả chi tiết về cách sử dụng tại đây: WCF Essentials - Fiddler

+0

Cảm ơn! vấn đề tôi gặp phải là kết quả của một dll thiếu mà tôi phát hiện ra sau khi làm theo các hướng dẫn trên liên kết mà bạn cung cấp. –

13

Tiếp theo thời gian, bạn nên cho phép WCF Tracing:

Đặt này trong tập tin web.config của bạn:

<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> 

Đọc thêm những điều này ở đây: http://msdn.microsoft.com/en-us/library/ms733025.aspx

+2

Tôi thấy rằng Trình xem sự kiện trong Windows ghi lại các lỗi này và nó tạo ra một thông báo lỗi nhỏ gọn hơn và dễ đọc hơn đã giúp tôi rất nhiều trong việc gỡ lỗi NotFound. – angularsen

Các vấn đề liên quan