2010-09-15 39 views
2

我想根據客戶端應用程序配置文件中的自定義信息動態更改從客戶端調用的WCF服務的地址。使用行爲動態更改WCF端點地址

我第一次嘗試是創建一個終結點行爲,並實施IEndpointBehavior.Validate方法,實現類似如下:

void IEndpointBehavior.Validate(ServiceEndpoint endpoint) 
{ 
    ... endpoint.Address = new EndpointAddress(...); 
} 

客戶端試圖連接之前,並出現成功改變這種方法被稱爲端點地址。但是,WCF基礎結構似乎仍嘗試使用原始地址進行連接。

有什麼方法可以使用端點行爲或其他WCF擴展點來實現這一點?

+0

爲什麼不直接使用帶有'EndPointAddress'的代理類構造函數? – 2010-09-15 18:28:34

+0

我不能實現我想要的使用代理類構造函數(實際上在我的情況下是ChannelFactory 構造函數),因爲那時我還不知道要使用哪個地址。 – Joe 2010-09-15 18:39:34

+1

如何在創建代理時不知道地址? – 2010-09-15 19:11:44

回答

2

我認爲問題是CommunicationObject的基本功能。當通信對象移動到打開狀態時,它不能改變任何東西。因此,如果您的通信對象(Channel或ChannelFactory)已處於打開狀態,則無法更改地址。

+0

這聽起來似乎合理。在打開ChannelFactory之後,推測IEndpointBehavior.Validate執行得太晚。我想知道是否有任何其他擴展點允許我在打開ChannelFactory之前將行爲附加到端點,以便實現我的目標。 – Joe 2010-09-15 19:47:34