11

WCF を使用して BizTalk サービスを呼び出しています。このサービスでは、プロセスが完了したときに「コールバック」を行うことができるように、SOAP ヘッダーに wsa:replyto アドレスを設定する必要があります。

svcutil から自動生成されたコードでコントラクト優先アプローチを使用しています (コントラクトを「ただ」変更することはできません)...

そして、構成ファイルで行うことはできません...

独自のカスタム ヘッダーを作成するためにいくつかのメソッドを「オーバーライド」している人を見たことがありますが、これはカスタム ヘッダーではなく、SOAP プロトコルの標準です。

(SOAP) ヘッダーに wsa:replyto を追加するにはどうすればよいですか?

4

1 に答える 1

11

WCFからWS-Addressingを必要とするサービスを呼び出すには、 WSHttpBindingなど、それをサポートするバインディングを使用するようにクライアントエンドポイントを構成する必要があります。

次に、 OperationContext.OutgoingMessageHeadersプロパティwsa:ReplyToを使用して、クライアントコードの特定のURLにヘッダーを設定できます。

using (new OperationContextScope((IContextChannel)channel))
{
    OperationContext.Current.OutgoingMessageHeaders.ReplyTo =
        new EndpointAddress("http://client/callback");

    channel.DoSomething();
}

この例では、wsa:ReplyToヘッダーを既知のURLに設定しており、クライアントチャネルはサービスからの着信コールバックメッセージをリッスンします。

または、サービスがサポートしている場合は、 WS-Addressingを介した二重通信のサポートが組み込まれているWSDualHttpBindingを使用できます。この場合、WSDualHttpBinding.ClientBaseAddressプロパティを介してコールバックアドレスを設定します。

<system.serviceModel>
    <bindings>
        <wsDualHttpBinding>
            <binding clientBaseAddress="http://client/callback" />
        </wsDualHttpBinding>
    </bindings>

    <client>
        <endpoint address="http://server/service"
                  binding="wsDualHttpBinding"
                  contract="Namespace.Service" />
    </client>
</system.serviceModel>
于 2012-02-06T10:21:39.743 に答える