WCF客户端包括许多新的和改进的用于提高工作效率的功能。IDE 还进行了重新设计,从而向开发人员提供对.NET Framework 组件的直接访问。
[注:Method、Operation 中文都叫做「方法」,但前者是存在 OO 中的类,不存在网络上;后者存在于 Service 中,公开在网络上可供其他程序调用。WCF、Data Services 和 RIA Services 中公开在网络上的函数和方法,都可称作 Operation。#t#
关于这点,小弟我查了微软 MCTS 认证 WCF 3.5 的官方用书 [10]、O'Reilly 的书籍 [11],都未提到如何解决,书中只提到 .NET collections 的 metadata,以 WSDL 在网络上传输时,会以「数组 (array)」的格式呈现。
Because .NET collections are .NET-specific, WCF cannot expose them in the service metadata, yet because they are so useful, WCF offers dedicated marshaling rules for collections.
Whenever you define a service operation that uses the collection interfaces IEnumerable<T>, IList<T>, or ICollection<T>, the specific collection-type information gets lost in the metadata (WSDL) export, so in terms of how collection types are sent across the wire, they all are represented as arrays, the resulting metadata always uses an array.
开发WCF客户端 时,若 VS 2008 都用默认配置,则当 WCF 的服务器端函数 (Operation) 的返回类型为 List<string> 时,实际返回的类型为 string[] 数组,因此客户端若仍用 List<string> 的变量去接收和赋值时,在编译时期,即会发生下图 1 的转型错误:
WCF 客户端程序「添加服务引用 (Add Service Reference)」的设置即可处理此种需求。做法如下:
请参阅本帖。当我们的WCF客户端程序,要引用网络上既有的 WCF 服务契约时,我们会如下图 2 般,添加一个 service proxy reference。