2013-03-20 56 views
0

我正嘗試從BizTalk向.NET客戶端發送SOAP錯誤。 BizTalk沒有開箱即用的方式公開錯誤契約,所以我在messageinspector中創建了錯誤消息(BeforeSendReply)無法從WCF服務接收SOAP錯誤

我有一個.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。使用網絡命名管道綁定時會發生此問題。這種情況有什麼區別?

回答

0

問題是肥皂頭「RelatesTo」沒有傳遞給我的錯誤消息,所以當客戶端收到錯誤消息時,它不知道如何處理它。 我想WSHttpBinding不會像NetNamedPipeBinding那樣使用RelatesTo頭?