【问题标题】:Unable to receive SOAP fault from WCF service无法从 WCF 服务接收 SOAP 错误
【发布时间】:2013-03-20 18:58:05
【问题描述】:

我正在尝试从 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。使用网络命名管道绑定时会出现此问题。这种情况有什么区别?

【问题讨论】:

    标签: wcf biztalk fault


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2012-05-20
      相关资源
      最近更新 更多