2012-06-03 87 views
1

我是一個WCF新手,我需要一些幫助來開始一個項目:WCF通信在互聯網上

我將有一個管理應用程序(服務器)需要進行通信(通訊系統)與幾個客戶通過互聯網,反之亦然。

實現此目標的最佳方法是什麼? 使用wsDualBinding?

UPDATE

我決定使用NetTcpBinding的模式,而不是。

回答

1

WSDualHttpBinding不適合上網。只有在沒有防火牆和NAS限制的本地網絡(內部網)中回叫纔有效。

詳情請參見這篇文章:

Connecting over internet to WCF service using wsDualHttpBinding times out

使用WsHttpBinding如果要設置服務器到服務器的通信(應爲WPF工作)。

如果您打算使用Javascript中的數據,請使用WebHttpBinding

+0

謝謝,在閱讀了很多內容之後,我專門使用了NetTcpBinding模式。 –

3

這取決於您的服務需要展示哪些功能以及需要支持哪種類型的客戶端。任何基於HTTP的綁定都可以在互聯網上運行,它只是數據編碼方式的一個問題。

內置的綁定和他們支持什麼樣的總結可以在這裏找到:http://msdn.microsoft.com/en-us/library/ms731092.aspx

但最常見的是:

  • basicHttpBinding的 - 這是一個基本的Web服務風格的結合,任何SOAP客戶端均可使用。
  • WebHttpBinding - 這允許您的服務被非SOAP HTTP客戶端使用
  • WsHttpBinding - 這允許您的服務使用擴展服務功能,如事務和會話。
  • WsDualHttpBinding - 如果您的服務需要雙工通道,則這是必需的,這意味着您的服務需要對客戶端進行回調。

既然你特別問二元結合:

如果你正在編寫需要能夠實現從服務器回調到客戶端的應用程序,那麼雙重結合真的是你唯一的選擇。但是,由於您特別提到了聊天,所以我認爲雙通道服務不會奏效。

回調在WCF中的工作方式是您的客戶端使用雙通道調用服務,並且必須提供回調接口的實現。在服務方法調用期間,服務器可以使用它來撥打客戶端;回調上下文是按服務調用的,因此一旦該調用返回,它就不再有效。換句話說,你的服務器不能異步地「調用」你的客戶端,它必須等待客戶端「輪詢」服務器。如果你打算這樣做,你不再需要這個回調。

老實說,我不認爲我會用WCF上的互動式雙向聊天應用程序,但我能想到的兩種可能的選擇,這樣做的:

  1. 執行輪詢客戶端選項,使用在服務器上簡單的BasicHttpBinding並不斷要求新消息。
  2. 將您的客戶端應用程序設置爲自主託管本地WCF服務,並在您登錄時向服務器提供端點信息。這要求您的客戶端接受傳入連接,這會變得混亂(但如果您可以將其關閉,我會在這裏進行NetTcpBinding。)
+0

我意識到可能的選擇,我的問題是要知道wsdualhhp結合是否是「聊天」系統的最佳解決方案。服務器應用程序和客戶端應用程序都是用WPF構建的。 –