2011-05-27 17 views
1

在我的應用程序中,我有一個值(「BusinessUnit」),我希望將其添加到每個Web服務請求中。這樣做的一種方法是編寫一個WCF行爲,它會爲我插入值。使域數據可用於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

如果這個值對所有的調用都是一樣的,那麼你可以考慮使用它的靜態變量。如果每次通話不同,您可以使用操作情況下添加它(甚至跳過行爲),如下圖所示

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(); 
+0

感謝您的支持 - 第三種方式是可行的。我希望能夠在web.config中設置行爲,以避免更改任何代碼。對於第一種方式 - 所有呼叫的值都不相同。對於第二種方式,我想要使用一種行爲,以便我可以在50多種網絡服務中完成此操作。 – 2011-05-27 18:28:35

相關問題