2009-07-16 89 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,并且自动代理生成通常在此时生效。

希望这可以帮助你至少指向正确的方向。