1

私のアプリケーションには、Web サービスへのすべてのリクエストに追加したい値 (「BusinessUnit」) があります。これを行う 1 つの方法は、値を挿入する WCF 動作を記述することです。

ただし、明確でない部分の 1 つは、この値をアプリケーションから取得して動作に組み込む方法です。

私の質問を説明するために、これを実装する方法を次に示します。

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    string businessUnit = //How do I set this to a value known by the client?
    MessageHeader<string> header = 
        new MessageHeader<string>(businessUnit);
    request.Headers.Add(
        header.GetUntypedHeader("Business Unit", "http://mywebsite.com"));
}

何か案は?

4

1 に答える 1

1

この値がすべての呼び出しで同じである場合は、静的変数の使用を検討できます。呼び出しごとに異なる場合は、以下に示すように、操作コンテキストを使用して追加できます(さらには動作をスキップできます)。

ServiceClient client = new ServiceClient(...);
using (new OperationContextScope(client.InnerChannel))
{
    MessageHeader<string> header = new MessageHeader<string>(businessUnit);
    OperationContext.Current.OutgoingMessageHeaders.Add(header.GetUntypedHeader("Business Unit", "http://mywebsite.com"));
    client.MakeServiceCall();
}

呼び出しのグループごとに異なるものである場合は、クライアントを作成するときにビヘイビアーに渡すことを検討できます。その後、ビヘイビアーはそれを作成するインスペクターに渡すことができます。

ServiceClient client = new ServiceClient(...);
client.Endpoint.Behaviors.Add(new MyBehavior(businessUnit));
client.MakeServiceCall1();
client.MakeServiceCall2();
client.MakeServiceCall3();
于 2011-05-27T15:23:14.110 に答える