2013-03-20 4 views
0

Я пытаюсь отправить ошибку мыла из BizTalk в .NET-клиент. BizTalk не имеет в своем распоряжении способ разоблачения контрактов на неисправность, поэтому я создаю сообщение о неисправности в messageinspector (BeforeSendReply)Невозможно получить ошибку SOAP из службы WCF

У меня есть клиент .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.

Что я пропустил?

EDIT:

Это на самом деле работает для WSHttpBinding. Проблема возникает при использовании привязки net named pipe. В чем разница в этом случае?

ответ

0

Проблема заключалась в том, что заголовок мыла «RelatesTo» не передавался вместе с моим сообщением о неисправности, поэтому, когда клиент получил сообщение о неисправности, он не знал, что с ним делать. Я полагаю, что WSHttpBinding не использует заголовок RelatesTo так же, как NetNamedPipeBinding?