WCF 服务参考作为数组与 List<T>

Posted

技术标签:

【中文标题】WCF 服务参考作为数组与 List<T>【英文标题】:WCF Service Reference as array vs. List<T> 【发布时间】:2021-02-23 00:39:00 【问题描述】:

我们有一个 asp 网站,其中包含对 WCF 项目的服务引用。我们已将服务集合类型的配置设置为 System.Collection.Generic.List,但 reference.cs 显示的是数组。我们可以看到

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

在reference.svcmap中。

如果可能,我们更愿意使用 List。我们缺少什么?为什么在被告知将数组转换为列表时却坚持构建一个充满数组的引用?

Visual Studio 2019,asp.net 4.8

【问题讨论】:

【参考方案1】:

在添加服务参考工具中设置:

最后,应用此设置生成代理类。

【讨论】:

正如我在问题中所说,我们做到了。它不起作用。 它在我的电脑上运行良好。您可以尝试重新使用“添加服务引用”来生成代理类,然后按照我上面的步骤进行设置。 我们做到了。这正是我们所做的就是添加一个服务引用并将集合设置为 Generic.List。我们已经在 asp 和 wpf 中对同一个 WCF 进行了此操作。它只是生成数组。 会不会是项目造成的?您可以尝试新建一个项目添加服务引用,看看是否出现此问题。 它实际上是 Visual Studio 的一个“未记录的功能”......谢谢微软。当使用 XML 序列化器而不是 DataContract 序列化器时,Visual Studio 中的服务连接工具不会按要求创建类。【参考方案2】:

对于那些遇到这种情况的人:这实际上是 Visual Studio 的“未记录的功能”......谢谢微软。当使用 XML 序列化程序而不是 DataContract 序列化程序时,Visual Studio 中的服务连接工具不会按请求创建类。您可以手动更改 reference.cs,或使用 .net core 迁移到 webAPI。

【讨论】:

以上是关于WCF 服务参考作为数组与 List<T>的主要内容,如果未能解决你的问题,请参考以下文章

为啥 WCF 会返回 myObject[] 而不是 List<T> 像我期望的那样?

如何在测试 WCF 服务时将值传递给 List<string> 属性?

引用WCF服务后,数组默认替换了List泛型的解决办法

数组与List之间的转换

C# 如何获取泛型集合 的数据

std::initialize_list<T;作为返回值