WCF代理返回数组而不是列表甚至收集类型== Generic.List

Old*_*zer 12 tfs wcf wcf-client tfs2010 visual-studio-2012

我有一个包含WCF库项目的VS 2010解决方案和另一个使用该Web服务的项目.在VS 2012开放后,它进行了升级.

代理现在将List <T>类型作为数组返回,即使CollectionMappings明确设置为Generic.List.

可能会发生什么?

其他人在这里有类似的问题,但他正在从VS 2012降级到VS 2010.

编辑:我仔细检查,Reference.svcmap包含:

<CollectionMappings>
  <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
</CollectionMappings>
Run Code Online (Sandbox Code Playgroud)

但Reference.cs包含的内容如下:

 public xxx.ServiceReference1.ADUser[] get_ADUsers;
Run Code Online (Sandbox Code Playgroud)

在Web服务中它是:

 public List<ADUser> get_ADUsers(string wildcard, string sortexp, string sortorder)
Run Code Online (Sandbox Code Playgroud)

更多信息(2012年12月12日添加):

在VS2010中创建的解决方案在另一台PC上运行良好.它从该PC检入TFS.在这个有问题的PC上,我们进行了映射和GET.当我们尝试构建时,我们得到了这个错误,其中服务引用中使用的所有List <T>类型都以某种方式被视为数组.我们在有问题的PC上安装了VS 2010并获得了该解决方案.同样的错误也存在.所以,它似乎与VS 2012无关.

所有PC都是Windows 7 Professional.

更多信息(2012年12月19日添加):

项目打开时,本地PC上的ServiceReferences/ServiceReference1/Reference.cs会自动修改.变化是巨大的.以下是其中的一小部分:

在此输入图像描述

显示了两种方法.List <string> get_Hotlines()成为string [] get_Hotlines()和List <string> get_HotlinesBySite()成为string [] get_HotlinesBySite().

即使没有我的要求,为什么文件也会改变?VS 2012升级日志表示两个文件已更改,但Reference.cs不是其中之一.

Gre*_*mar 5

添加对wcf服务的引用时,需要将Collection Type更改为Generic List:

在此输入图像描述

您也可以更新此设置,只需在解决方案中选择服务参考,右键单击并选择"配置服务参考..."

  • -1 OP表示他已经这样做了.我也看到了同样的问题.它在同事的机器上生成列表,在我的阵列上生成阵列,即使我们在"服务参考设置"对话框中具有相同的设置. (3认同)

Bou*_*uke 0

它对我的作用是:

  1. 安装 Visual Studio 2013 的所有更新
  2. 取消选中“在引用的程序集中重用类型”