2012-03-28 54 views
2

我的應用程序有一個工作HttpChannel,我可以在遠程服務器上調用一個方法。.NET Remoting - 客戶端上的多通道寄存器

現在,在應用程序中,我需要註冊另一個在另一個服務器上調用另一個方法的HttpChannel。

但是,如果我不取消註冊第一個通道,應用程序將失敗。

如何讓這兩個remotings成功調用遠程方法?

回答

2

我們有類似的情況,只有在需要時才註冊一個頻道,然後在我們完成後立即取消註冊,類似於您連接的ADO.NET的斷開模型,獲取數據,然後斷開。

documentation

  • 通道上註冊每個應用程序域的基礎。一個單一的 進程可以包含多個應用程序域。當一個過程結束時,所有註冊的頻道都會被自動銷燬。
  • 頻道 名稱在應用程序域中必須是唯一的。例如, 由於默認通道具有名稱,因此要在一個應用程序域中註冊兩個HttpChannel對象,則必須在註冊之前更改 通道的名稱。以下C#代碼示例 演示了這一點。
IDictionary prop = new Hashtable(); 
prop["name"] = "http1"; 
prop["port"] = "9001"; 
ChannelServices.RegisterChannel(new HttpChannel(prop, null, null)); 
  • 不能註冊一個特定的端口不止一次 上偵聽的通道。即使通道在每個應用程序域的基礎上註冊爲 ,但同一臺機器上的不同應用程序域不能註冊偵聽相同端口上的相同通道。
  • 如果您不確定某個端口是否可用,請在配置您的通道端口時使用0 (零),遠程處理系統 將爲您選擇一個可用端口。
  • 客戶端可以使用任何註冊的通道與遠程對象進行通信。遠程處理系統 確保當客戶端嘗試連接到該對象時,遠程對象連接到右通道。在嘗試 與遠程對象通信之前,客戶端負責調用ChannelServices.RegisterChannel,負責 。如果需要回撥功能,則客戶端必須註冊一個通道和一個端口。

所以,通道的名字必須是你的應用程序了域內是唯一的,並通過設計,只有一個HTTP通道時,有一次一個端口。在同一端口上不能有兩個不同的通道。

+0

謝謝大衛。但是,試圖使用您註銷的頻道的請求會發生什麼情況?這不是問題嗎? – 2012-03-28 21:48:41

+0

是的。唯一的選擇是在兩個不同的端口上註冊兩個不同的通道。在同一個端口上打開多個通道是不允許的,所以你有一個端口監聽(作爲服務器),並使用不同的通道呼叫另一個服務器(作爲客戶端)。 – David 2012-03-28 21:50:03

+0

作爲客戶端,我們是否需要配置「端口」或「代理端口」?服務器是否需要進行任何更改? – 2012-03-28 21:52:35