代码之家  ›  专栏  ›  技术社区  ›  ScottG

为什么WCF返回myObject[],而不是像我预期的那样返回List<T>?

  •  63
  • ScottG  · 技术社区  · 16 年前

    我正在从WCF方法返回一个List。在我的客户端代码中,它的返回类型显示为MyObject[]。我必须使用MyObject[]、IList或IEnumerable。..

    WCFClient myClient = new WCFClient();
    
        MyObject[] list = myClient.GetMyStuff();
    or
        IList<MyObject> list = myClient.GetMyStuff();
    or
        IEnumerable<MyObject> list = myClient.GetMyStuff();
    

    我所做的就是获取这个集合并将其绑定到网格。分配我返回的集合的最佳对象是什么?

    4 回复  |  直到 15 年前
        1
  •  83
  •   Stever B    16 年前

    您可以在添加引用时单击高级按钮,指定要使用通用列表而不是数组,也可以右键单击服务引用并选择配置以就地更改。

    原因是WCF将泛型列表序列化为数组,以便通过网络发送。该配置只是告诉svcutil创建一个代理,将它们转换回通用列表,以方便您使用。

        2
  •  13
  •   Andrew Hare    16 年前

    当你使用 svcutil.exe 要创建客户端代码,您需要告诉它如何解析某些不可用的引用。

    你会这样做的 List<T> :

    svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex
    
        3
  •  8
  •   Tad Donaghe    16 年前

    Stever B是正确的。WCF非常努力地不与之耦合。网。您可能希望允许Java客户端连接到您的组件。数组是可互操作的。通用。NET列表不是。

    但是,我们非常欢迎您创建自己的代理类,该类将数组转换回List或您想要的任何其他类型。手动创建自己的代理的好处是,您可以完全控制它们的工作。

        4
  •  2
  •   Indeed is Trash    16 年前

    当您将服务引用添加到客户端项目时,单击高级按钮并将集合类型从数组更改为您想要的类型。。。