【问题标题】:Why would a WCF method's return type be changed from a generic collection to an array?为什么 WCF 方法的返回类型会从泛型集合更改为数组?
【发布时间】:2009-06-10 12:59:41
【问题描述】:

我有一个 WCF 服务方法,我为返回类型编写了一个集合类型。

但是,如果我生成一个代理类并使用客户端的方法,则方法的返回类型会从集合更改为数组。

为什么会这样?

【问题讨论】:

  • 这是常见问题解答吗?重复?我发誓我以前看过这个问题并回答过。

标签: .net wcf


【解决方案1】:

记住 - WCF 也是一个可互操作的系统,例如您的另一端可能是无法理解 .NET 通用列表的 PHP、Java 或 Ruby 客户端!

您可以使用 Andrew 和 Jimmie 提到的两个选项指定您想要的通用列表 - 当且仅当您还使用 DataContractSerializer(这是 WCF 的默认选择)时才有效。但是,如果您的服务和/或数据合同出于某种原因需要使用 XmlSerializer,那么这些设置将无济于事 - 您的列表将再次转换为数组。

因此请尝试显示的这些选项,如果它们对您有用 - 太好了!但请注意,有充分的理由说明您的通用列表可能只需要转换为更具互操作性的对象数组。

马克

【讨论】:

    【解决方案2】:

    您需要告诉svcutil 将类型生成为您想要的任何泛型类型。为此,您可以将此开关添加到 svcutil 命令:

    svcutil ..blah... /ct:System.Collections.ObjectModel.Collection`1
    

    /ct/collectionType 的缩写。在这种情况下,我指定了Collection<T>,但您也可以轻松使用System.Collections.Generic.List<T>

    【讨论】:

      【解决方案3】:

      如果您在 Visual Studio 中使用“添加服务引用”生成代理,则会出现一个“高级”按钮,该按钮会弹出一个对话框,允许您指定返回类型应该是什么(包括通用类型)。

      【讨论】:

        【解决方案4】:

        如果您使用的是 Visual Studio,您只需右键单击您的服务引用即可对其进行配置。 然后,您将有一个选项(在高级设置中?)告诉您的应用如何将数组作为集合处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 2021-11-06
          相关资源
          最近更新 更多