2011-02-15 158 views
1

我對如何完成此任務有點不滿。問題是,如何從多個託管服務器調用WCF服務。 WCF對於所有託管應用程序都是一樣的。相同的合同,相同的綁定類型等我試圖用這種方式調用它,因爲我將主機服務在多個服務器中,我需要服務在所有服務中都這樣做。我必須從一個客戶端調用它。 VS 2010,.Net Framework 4.0,C#。從多個託管服務器調用相同的WCF服務

謝謝,

+1

何塞,你的意思是你想連接到不同的服務器和調用相同的WCF服務在他們所有的一個接一個?你有服務器地址,它們大多是靜態的嗎? – 2011-02-15 20:55:03

+0

是的,Davide,就是。服務器地址是給我的。所以,我只需要弄清楚如何根據需要對客戶端部分進行編碼以便從服務器或全部服務中調用服務,如您所說的那樣。感謝您的答覆。 – 2011-02-15 21:03:53

回答

2

這取決於您計劃如何在客戶端應用程序中創建服務代理。如果您想添加服務引用,那麼從一臺服務器添加它就足夠了,然後爲其他服務器創建單獨的端點配置 - 除地址外(您可以在代碼中執行相同操作),所有端點配置將完全相同。不使用添加服務引用

foreach(var endpointName in myStoredEndpointNames) 
{ 
    var proxy = new MyServiceProxy(endpointName); 
    proxy.CallSomeOperation(); 
} 

另一種方法:當你打電話的服務,你會爲每個服務器創建代理實例,你會像每個服務器傳遞終點(在配置中定義)的名字。在這種情況下,您必須共享服務器和客戶端應用程序之間的合同,您可以使用ChannelFactory。這個類是通過調用CreateChannel創建的客戶端代理的工廠。調用此方法時,您可以傳遞端點配置名稱endpoint addressbinding and endpoint address

+0

感謝您的回覆。我使用了添加代理的參考。綁定類型是一個net.tcp綁定,事實是,據我所知,我無法爲相同配置文件中的每個服務器爲相同類型的綁定設置客戶端端點。這是我需要上面的樣品,或者我可以嗎?對於我缺乏知識感到抱歉,但這是我的第一個WCF服務,而我仍然處於這個軌道。 – 2011-02-16 14:26:35

1

我用這樣的函數:

public static MyWcfClientType GetWcFClient(string hostName) 
{ 
    MyWcfClientType client = new MyWcfClientType(); 

    // Build a new URI object using the given hostname 
    UriBuilder uriBld = new UriBuilder(client.Endpoint.Address.Uri); 
    uriBld.Host = hostName; 

    // Set a new endpoint address into the client 
    client.Endpoint.Address = new EndpointAddress(uriBld.ToString()); 
    return client; 
} 

當然可以用自己的類型爲「MyWcfClientType」