无法从WCF服务接收SOAP错误

时间:2013-03-20 18:58:05

标签: wcf biztalk fault

我正在尝试将BizTalk中的soap错误发送到.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。使用网络命名管道绑定时会出现此问题。这种情况有什么区别?

1 个答案:

答案 0 :(得分:0)

问题是soap标题“RelatesTo”没有传递给我的错误消息,因此当客户端收到错误消息时它不知道如何处理它。 我想WSHttpBinding不像NetNamedPipeBinding那样使用RelatesTo标头吗?