在开发可互操作的WCF web服务时,我应该知道什么?

在开发可互操作的WCF web服务时,我应该知道什么?,wcf,web-services,interop,wcf-interoperability,Wcf,Web Services,Interop,Wcf Interoperability,我启动这个Wiki是为了收集有关在WCF中创建可互操作的web服务(而不是客户端)的最佳实践。如果您知道任何功能通常不可互操作,或者无法与特定平台互操作,请分享您的经验。相当简单: 避免任何.NET规范,如异常(将其转化为SOAP错误) 不要使用任何以net开头的绑定,比如netTcp、netNamedPipes、netMsmq等等-使用wsHttpBinding来获得安全的WS-*服务,使用basicHttpBinding来获得与最古怪的客户端平台的最大范围/兼容性 不要使用NetDataC

我启动这个Wiki是为了收集有关在WCF中创建可互操作的web服务(而不是客户端)的最佳实践。如果您知道任何功能通常不可互操作,或者无法与特定平台互操作,请分享您的经验。

相当简单:

  • 避免任何.NET规范,如异常(将其转化为SOAP错误)

  • 不要使用任何以
    net
    开头的绑定,比如netTcp、netNamedPipes、netMsmq等等-使用
    wsHttpBinding
    来获得安全的WS-*服务,使用
    basicHttpBinding
    来获得与最古怪的客户端平台的最大范围/兼容性

  • 不要使用NetDataContractSerializer


我建议WCF REST公开多种序列化格式,对于初学者来说绝对是xml。

通用互操作性:

  • 只有HTTP和HTTPS传输通道是可互操作的
  • 安全凭据的协商不可互操作(消息安全中的negotiateServiceCredential)。它使用其他平台并不总是支持的TLSNego或SPNego协议
  • HTTP流也会引起麻烦
  • HTTP通道上的二进制编码不可互操作
  • 事务不可互操作
  • 小心使用服务安全上下文(消息安全中的estabilishSecurityContext)。它使用WS-Secure对话协议,这在某些平台上不可用
编辑:

  • WSDualHttpBinding和CompositedPlexBindingElement不可互操作
1)关于如何将异常更改为SOAP故障的提示我不知道那到底是什么意思。2) 关于不使用NetDataContractSerializer:我在数据契约上使用System.Xml.Serialization,这是更好的互操作性选择吗?