我正在尝试从 BizTalk 向 .NET 客户端发送一个肥皂故障。BizTalk 没有现成的公开故障合同的方式,因此我在 messageinspector (BeforeSendReply) 中创建故障消息
我有一个 .NET 客户端,它具有对 BizTalk 的服务引用,而对故障合同一无所知。BizTalk WCF 服务配置为接收请求并返回错误(用于测试)。
当客户端收到来自 BizTalk 的故障时,我得到:“服务器没有提供有意义的回复;这可能是由合同不匹配、会话过早关闭或内部服务器错误引起的。”
当我打开消息跟踪时,我可以确定确实在传输级别跟踪了故障消息。
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:To s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/anonymous</a:To>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Client</s:Value>
</s:Code>
<s:Reason>
<s:Text xml:lang="en-US">BTSError</s:Text>
</s:Reason>
<s:Detail><DaxFaultContract xmlns="http://MyNamespace">
<ErrorCode>1</ErrorCode>
<ErrorText>This is an exception</ErrorText>
</DaxFaultContract></s:Detail>
</s:Fault>
</s:Body>
</s:Envelope>
我想,即使对 DaxFaultContract 没有任何了解,客户端也能够抛出无类型的 FaultException。
我错过了什么?
编辑:
这实际上适用于 WSHttpBinding。使用网络命名管道绑定时会出现此问题。在这种情况下有什么区别?