2009-02-19 66 views
1

我知道我可以做類似下面的代碼,以動態創建WCF客戶終端連接:如何在類型未知時創建動態客戶端代理連接?

BasicHttpBinding basic = 
    new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 

basic.Security.Transport.ClientCredentialType = 
    HttpClientCredentialType.Ntlm; 

EndpointAddress serviceAddress = 
    new EndpointAddress("http://whatever/service.svc"); 

YourServiceClient m_client = new YourServiceClient(basic, serviceAddress); 

的問題是,在這種情況下,我需要知道什麼「YourServiceClient」的。我想要做的是從數據庫中獲取類型'YourServiceClient',並將其存儲爲對象。有誰知道我會如何去做這樣的事情?在我從數據庫中檢索到的對象中,我具有「YourServiceClient」的價值?

回答

0

你不能這樣做。基本上,你要求在運行時得到未知的,但在編譯時綁定到已知類型。如果您嘗試訪問的服務具有某種共享界面,則無法完成此操作。

如果它們具有相同的接口(意思是說,相同的方法等等),那麼你可以使用這裏的例子在運行時創建你自己的通道工廠,並獲得一個代理來實現服務:

http://msdn.microsoft.com/en-us/library/ms734681.aspx

0

聶雅倫已覆蓋在他的博客的東西(我認爲)這個樣子,開始part 1

還有,IIRC,只是接收原始XML消息,然後你可以處理你自己,而不是能力使用類型特定的代理。

0

如果有能夠在這裏使用泛型(如果沒有,那麼你可能需要使用如果沒有一些反思),那麼這是你所追求的?

public TContract GetService<TContract>(EndpointAddress address){ 
    var channelFactory = new ChannelFactory<TContract>(new NetTcpBinding(),address); 
    return channelFactory.CreateChannel(); 
} 
相關問題