使域数据可用于WCF行为

时间:2011-05-27 10:27:18

标签: wcf wcf-behaviour

在我的应用程序中,我有一个值(“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"));
}

有什么想法吗?

1 个答案:

答案 0 :(得分: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();
}

如果某些内容因 group 的调用而异,您可以考虑在创建客户端时将其传递给行为,然后行为可以将其传递给它创建的检查器:

ServiceClient client = new ServiceClient(...);
client.Endpoint.Behaviors.Add(new MyBehavior(businessUnit));
client.MakeServiceCall1();
client.MakeServiceCall2();
client.MakeServiceCall3();