2009-07-28 54 views
13

我需要將自定義行爲擴展添加到我的WCF客戶端端點。我試圖通過配置來做到這一點,但是被WFC配置無法正確解析類型名稱的經常提及的bug所困擾。那麼我可以用編程方式來做這件事嗎?以編程方式和全局添加自定義WCF客戶端端點行爲擴展

我不能在運行時修改配置節,因爲它們是隻讀的。我知道如果我確定了客戶端代理的實例(即ClientBase),我可以向其Endpoint.Behaviors添加自定義行爲的實例。不過,我必須爲每個實例都做這件事。

我可以到達全局端點並預先添加它們(例如在Global.asax中),還是這些端點可以暫時實例化並丟棄?

+0

你能發佈一個關於不正確解析類型名的問題嗎? – 2009-07-29 02:39:50

回答

14

您應該能夠到行爲添加到客戶端的代碼是這樣的:如果該行爲已應用於避免將兩次

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>(); 

if(behavior == null) 
{ 
    client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation()); 
} 

第一行會檢查。如果它尚未應用(.Find()調用返回null),那麼您可以以編程方式將該行爲添加到您的客戶端類。

顯然,您需要在發出服務的第一個呼叫之前執行所有操作。一旦你這樣做了,你不能再改變客戶端了。

Marc

+1

這是我們目前採用的解決方案之一。麻煩的部分是我們懶惰地初始化它。我更喜歡更積極的方法,可能是Global.asax。看來我可以把它放在應用程序配置中(本質上是全局的),或者我可以在首次使用時以編程方式配置它,但是我不能以編程方式*全局配置它。 – Trinition 2009-07-31 13:49:11

相關問題