1

私は現在、自分の管理外にある Java Web サービス用の WCF クライアントを作成しています。WCF は WSA To ヘッダーにエンドポイント アドレスを設定しているようですが、この Web サービスには別の値が必要です。

現在、次のように値を手動で設定しようとしています。

var binding = new CustomBinding();
binding.Elements.Add(GetSecurityElement());
binding.Elements.Add
(
    new TextMessageEncodingBindingElement
    (
        MessageVersion.Soap11WSAddressing10,
        Encoding.UTF8
    )
);
binding.Elements.Add(new HttpsTransportBindingElement());

var endpoint = new EndpointAddress
(
    new Uri("endpoint address"),
    new DnsEndpointIdentity("endpoint identity"),
    new AddressHeaderCollection()
);

var client = new Client(binding, endpoint);
client.Open();

using (new OperationContextScope(client.InnerChannel))
{
    OperationContext.Current.OutgoingMessageHeaders.To = new Uri("some other address");
    OperationContext.Current.OutgoingMessageHeaders.MessageId = new UniqueId("message id");
    var response = client.doSomething();
}

Fiddler を使用して生成および送信されたリクエストを調べると、MessageID ヘッダーがデフォルトの urn:uuid:[some uuid] ではなく「メッセージ ID」に正常に設定されていることがわかりますが、To ヘッダーはまだ「 「他のアドレス」ではなく、「エンドポイント アドレス」です。

ヘッダー値を上書きする他の方法はありますか?

4

2 に答える 2

3

ここで概説したアプローチを使用してこれを解決することができました。コードでは、解決策は次を使用することでした:

        var endpoint = new EndpointAddress
        (
            new Uri("wsa to address"),
            new DnsEndpointIdentity("endpoint identity"),
            new AddressHeaderCollection()
        );

WSA To ヘッダーの値を設定します。次に使用します。

        client.Endpoint.Behaviors.Add(new ClientViaBehavior(new Uri("address")));

リクエストが実際に送信されるアドレスを制御するため。

于 2012-05-03T07:56:11.070 に答える