2009-07-16 61 views
0

我一直在爲過去一天拋出ExecutionEngineException的web服務而苦苦掙扎。我終於弄明白Silverlight客戶端不喜歡IEnumerable <> IList <>也不是列表<>作爲返回類型。 MyObject []很好。HttpDuplexBinding web服務調用ExecutionEngineException

我設法複製它在試樣溶液:

服務描述:

[ServiceContract] 
    public interface IService 
    { 
     [OperationContract] 
     IEnumerable<Person> SomeStuff(); 
    } 

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class Service : IService 
{ 
     public IEnumerable<Person> SomeStuff() 
     { 
      return new Person[] { new Person { Name = "some person", ID = 42 } }; 
     } 
} 

    [DataContract] 
    public class Person 
    { 
     [DataMember] 
     public string Name { get; set; } 
     [DataMember] 
     public int ID { get; set; } 
    } 

在客戶端,只需要創建一個服務引用和調用服務。服務返回後拋出異常。

任何想法是什麼造成的問題,將不勝感激。

回答

0

我沒有一個正式的答案,但我注意到在SL 3.0的RTW版本中,自動生成代理有時在我身上嵌套,並且遺漏了數組/列表/泛型集合的傳遞發生了什麼事。我的解決方法 - 無可厚非的 - 有點奇怪:我右鍵單擊服務引用,選擇「配置服務引用」,選擇「在引用的程序集中重用類型」,然後仔細研究應使用哪些類型/程序集重新使用。最終它似乎工作。

如果這樣做不起作用,我重新啓動Visual Studio,並且自動代理生成通常在此時生效。

希望這可以幫助你至少指向正確的方向。