12

我有一个 VS 2010 解决方案,其中包含一个 WCF 库项目和另一个使用该 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>

但 Reference.cs 包含以下内容:

 public xxx.ServiceReference1.ADUser[] get_ADUsers;

在网络服务中是:

 public List<ADUser> get_ADUsers(string wildcard, string sortexp, string sortorder)

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

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

所有 PC 都是 Windows 7 专业版。

更多信息(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 不是其中之一。

4

3 回答 3

4

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

在此处输入图像描述

您也可以更新此设置,只需在解决方案中选择服务引用,单击鼠标右键并选择“配置服务引用...”

于 2012-12-19T18:58:26.820 回答
0

我对 VS2010 也有同样的问题。经过数小时的尝试和测试,我认为这是代码生成的错误。我能够重现它。这是服务器端的代码,它会影响 Visual Studio 代码生成的行为。在我的情况下,注释行产生了这个问题。当此成员不可为空时,Visual Studio 会生成 Array 集合而不是 List<>。

[DataContract]
public enum DocumentAttachmentSourceType
{
    [EnumMember]
    ServiceMission                              
}

[MessageContract]
public class DocumentUploadRequest : IDisposable
{
    [MessageHeader]
    public long NodeId { get; set; }

    [MessageHeader]
    public DocumentAttachmentSourceType? AttachmentSource { get; set; } //This works
    //public DocumentAttachmentSourceType  AttachmentSource { get; set; }   //This not works !!!!!!!

    [MessageBodyMember]
    public System.IO.Stream Stream { get; set; }


    public void Dispose()
    {
        if (Stream != null)
        {
            Stream.Close();
            Stream = null;
        }
    } 

}
于 2017-09-20T21:26:13.103 回答
0

它为我做了什么:

  1. 安装 Visual Studio 2013 的所有更新
  2. 取消选中“在引用的程序集中重用类型”
于 2015-11-02T09:01:31.403 回答