BizTalk から .NET クライアントに SOAP エラーを送信しようとしています。BizTalk にはすぐに使用できる障害コントラクトを公開する方法がないため、messageinspector (BeforeSendReply) で障害メッセージを作成しています。
フォールト コントラクトの知識がなくても、BizTalk へのサービス参照を持つ .NET クライアントがあります。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 で機能します。この問題は、ネットの名前付きパイプ バインディングを使用している場合に発生します。この場合の違いは何ですか?