可移植/可互操作的 WCF 合同
Posted
技术标签:
【中文标题】可移植/可互操作的 WCF 合同【英文标题】:Portable / Interoperable WCF Contracts 【发布时间】:2010-10-03 21:21:06 【问题描述】:我想知道是否有人在设计 WCF 合同时有一些好的提示/注意事项,并考虑到 Web 服务互操作性,无论是在旧的 Microsoft Web 服务技术(例如 WSE)和非 Microsoft 方面Java 调用 WCF Web 服务等技术。
例如:在将 DateTime 公开为合同中的类型时,是否需要考虑任何特殊规则?字典和哈希表怎么样?使用各种可用的绑定可能会遇到什么问题?
【问题讨论】:
【参考方案1】: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 特定的类型,例如 作为类型,作为操作参数。
绑定建立期望
基于 WSHttpBindingBase 的绑定(在 Reflector.NET 中搜索它的四个派生)将是最具互操作性的,因为它们是为互操作性而设计的。
图书推荐
我强烈推荐 Juval 的书:http://www.bookpool.com/sm/0596521308
【讨论】:
【参考方案2】:因此,如果您想与非 microsoft 服务互操作,您可能希望避开任何非原始类型。 WCF 使用序列化对传输数据进行编码,例如 Java 将无法反序列化哈希表。然而,WCF 是建立在 SOAP 之上的,因此通过一些工作,您应该能够让任何 SOAP 功能在 JAVA 客户端和 WCF 服务之间工作,反之亦然。
只要记住编写原语合约就可以了。
【讨论】:
以上是关于可移植/可互操作的 WCF 合同的主要内容,如果未能解决你的问题,请参考以下文章
哪个可用于 JavaScript 和 Grails/Java 的可互操作模板框架?
可互操作的 Obj-C typedef NS_ENUM 到 swift