1

在我的应用程序中,我有一个值(“BusinessUnit”),我想将它添加到对 Web 服务的每个请求中。这样做的一种方法是编写一个 WCF 行为,它会为我插入值。

但是,我不清楚的一个部分是如何从我的应用程序和行为中获取这个值。

为了说明我的问题,这里是我可以如何实现它。

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 回答