WCF代理返回而不是List阵列即使集合类型== Generic.List(WCF Proxy Re

2019-07-04 02:01发布

我有一个包含WCF库项目,另一个项目是消费web服务的VS 2010解决方案。 在VS 2012开盘后,它被升级。

代理现在返回列表<T>类型作为阵列,即使CollectionMappings清楚地设定为Generic.List。

可能是什么回事?

其他人也有类似的问题在这里 ,但他从降级VS 2012至10年,而不是VS。

编辑:我双重检查,并Reference.svcmap包含:

<CollectionMappings>
  <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
</CollectionMappings>

但Reference.cs包含的东西,如:

 public xxx.ServiceReference1.ADUser[] get_ADUsers;

当Web服务,它是:

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

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

该解决方案,在VS2010中创建,在另一台PC上工作的罚款。 它从PC签入到TFS。 在这个问题的电脑,我们做了映射和GET。 当我们试图建立,我们得到了错误的位置在所有的服务引用使用的List <T>类型都以某种方式为数组处理。 我们有问题的电脑上安装了VS 2010和获取解决方案了。 而同样的错误也有。 所以,看来它是不相关的VS 2012。

所有的PC是Windows 7专业版。

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

当项目被打开,ServiceReferences / ServiceReference1 / Reference.cs在本地计算机上被自动修改。 这些变化是巨大的。 下面是它的一小部分:

显示两个方法。 列表<字符串> get_Hotlines()成为串[] get_Hotlines()和List <字符串> get_HotlinesBySite()变为串[] get_HotlinesBySite()。

为什么文件甚至改变没有我问这个问题? 在VS 2012的升级日志上述两个文件被更改,但Reference.cs是不是其中之一。

Answer 1:

当您添加引用WCF服务,你需要收集类型更改为泛型列表:

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



Answer 2:

它干了什么对我来说是:

  1. 安装所有更新到Visual Studio 2013
  2. 取消“中引用组件重用类型”


Answer 3:

我有同样的问题与VS2010。 经过尝试和测试,我认为个小时,这是代码生成的错误。 我能够重现。 这里是服务器端,这对Visual Studio代码生成的行为的影响的代码。 该注释行我的情况产生这个问题。 当该部件是不为空,那么视觉工作室产生阵列的集合,而不是列表<>。

[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;
        }
    } 

}


文章来源: WCF Proxy Returning Array instead of List EVEN THOUGH Collection Type == Generic.List