9

我想知道是否有人在设计 WCF 合同时有一些好的提示/注意事项,考虑到 Web 服务互操作性,无论是在旧的 Microsoft Web 服务技术(例如 WSE)和非 Microsoft 技术方面,例如Java 调用 WCF Web 服务。

例如:在将 DateTime 暴露为合同中的类型时,是否需要考虑任何特殊规则?字典和哈希表怎么样?使用各种可用的绑定可能会遇到什么问题?

4

2 回答 2

7

WCF 日期时间问题

关于您的 DateTime 问题,您担心通过 WCF 传递 DateTime 是正确的。这只是许多抱怨困难的链接之一...... http://daveonsoftware.blogspot.com/2008/07/wcf-datetime-field-adjusted.html

关于类型等价

根据 Juval Lowy 的名为 Programming WCF Services, 2nd Edition 的书的第 3.1.3 节......

WCF 为原始类型提供隐式数据协定,因为这些类型的架构有一个行业标准。

他还指出了关于使用自定义类型作为 Operation Contract 方法的参数的问题。我认为这也适用于方法返回类型。

为了能够使用自定义类型作为操作参数,有两个要求:首先,该类型必须是可序列化的,其次,客户端和服务都需要具有该类型的本地定义,从而产生相同的数据架构。

您可能还想查看第 F.4 节。Data Contracts,这是他的 WCF 编码标准的一部分。Bullet #9 适用于您的问题...

不要将 .NET 特定类型(例如 Type)作为操作参数传递。

绑定建立期望

基于 WSHttpBindingBase(在 Reflector.NET 中搜索它的四个派生)的绑定将是最具互操作性的,因为它们是为互操作性而设计的。

书籍推荐

我强烈推荐 Juval 的书: http: //www.bookpool.com/sm/0596521308

于 2009-01-27T23:55:42.390 回答
1

因此,如果您想与非 microsoft 服务互操作,您可能希望避开任何非原始类型。WCF 使用序列化来编码数据以进行传输,例如 Java 将无法反序列化哈希表。然而,WCF 是建立在 SOAP 之上的,因此通过一些工作,您应该能够让任何 SOAP 功能在 JAVA 客户端和 WCF 服务之间工作,反之亦然。

只要记住编写原语合同,你就可以了。

于 2009-01-27T22:32:30.233 回答