便携/可互操作的WCF合同

时间:2009-01-27 22:20:41

标签: .net wcf interop datacontract contract

我想知道是否有任何人在设计WCF合同方面有一些很好的提示/注意事项,而不是在旧的Microsoft Web服务技术(例如WSE)和非Microsoft的Web服务互操作性方面诸如Java之类的技术调用WCF Web服务。

例如:在将DateTime作为合同中的类型公开时,是否需要考虑任何特殊规则?字典和Hashtables怎么样?您可能遇到的各种绑定有哪些问题?

2 个答案:

答案 0 :(得分:7)

WCF日期时间错误

关于你的DateTime问题,你关注通过WCF传递DateTime是正确的。这只是许多抱怨困难的一个环节...... http://daveonsoftware.blogspot.com/2008/07/wcf-datetime-field-adjusted.html

关于类型等价

根据Juval Lowy的书“编程WCF服务,第2版......”的第3.1.3节,

  

WCF提供隐式数据合同   原始类型因为有   模式的行业标准   那些类型。

他还指出,在使用自定义类型作为操作合同方法的参数方面。我认为这也适用于方法返回类型。

  

能够将自定义类型用作   操作参数有两个   要求:首先,类型必须   序列化,第二,两者   客户和服务需要有一个   该类型的本地定义   导致相同的数据模式。

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

  

不要传递特定于.NET的类型   作为类型,作为操作参数。

绑定建立期望

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

图书推荐

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

答案 1 :(得分:1)

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

请记住撰写原始合同,你应该做好。