2012-04-19 81 views
2

我需要允許多個客戶端(winforms應用程序)通過互聯網(遠程位置)連接到服務器,並啓動雙工通信,有時發送交通繁重。WCF(或其他解決方案)安全雙工通信的最佳方法

目前我們正在使用帶有WCF的netTcpBinding使用雙工通信,使用我們自己的證書對傳輸層進行了保護。雖然這個工作,我關注的一些事情:

  • 它是一個痛苦的設置 - 我們創建了一個證書,爲每個客戶端與服務器識別它,並需要對每個客戶端註冊證書客戶端機器和服務器
  • 因爲我們在某個端口上使用tcp,所以我們依靠在客戶端打開該部分,以便它可以通過tcp啓動通信。一些客戶位置不喜歡這個。
  • 我們需要能夠保證交貨理想

作爲替代,我想知道如何使用wsDualHttpBinding,用一個單一的SSL證書來保護它,讓每個客戶端發送某種標識來識別自己。這是否會解決防火牆問題的問題,並且它會通過http而不是tcp執行嗎?從我所知道的WCF將創建2個頻道,而不是一個,如果你使用http(因爲http doens't支持雙向通信) - 這樣聽起來像它可能會導致一些問題的表現..

我的問題是,這個解決方案是否更好,還是有其他解決方案(如NServiceBus)可以使這更容易並解決這些問題?

編輯

我因爲得知wsDualHttpBinding不適合我,因爲一個選項:This binding requires that the client has a public URI that provides a callback endpoint for the service。這對我來說是不可能的。

+0

您是否繼續在netTcpBinding服務中的項目或將其更改爲另一個WCF解決方案?我有一個桌面應用程序在客戶端機器和服務器應通過互聯網相互綁定。 – Hamid 2015-12-22 04:52:16

回答

6

讓我解決單獨每一個關注點:

  1. 爲什麼不使用TransportWithMessageCredential並使用用戶名和 密碼 - 在客戶端,這意味着你只需要管理用戶名和 密碼,客戶證書的問題會消失

  2. 隨着NetTcpBinding的服務器需要開放的端口爲入站 交通 - 客戶端只需要允許客戶端連接到 端口,他們並不需要允許我您的 特定端口上的nbound連接。他們是否有允許出站 連接到您的自定義端口的問題?

  3. NetTcpBinding使用Tcp,它保證傳遞,假設你沒有在拓撲中有一個SOAP中介。您是否想要 保證交貨或處理?

WSDualHttpBinding將迫使你的客戶打開一個端口入站連接所以幾乎可以肯定是不能接受的。我寫了一個blog article關於複用一會兒,可能有助於澄清問題

您也可能想看看SignalR這是專爲這種場景設計,雖然爲網絡應用程序設計也有一個.NET客戶端以及

+0

非常感謝這個偉大的迴應。我同意證書問題很笨拙,並且使用TransportWithMessageCredential確實有意義。我不知道netTcpBinding保證交付,但這是令人鼓舞的。 – 2012-04-19 09:32:09

+0

使用SignalR的WRT - 我發現它適合雙向通信的賬單,但我不確定這是如何工作的.net客戶端應用程序。對於網絡應用程序,它使用websockets,回到長輪詢。但是.net客戶端應用程序使用了什麼?它只是http? – 2012-04-19 09:36:17

+0

通過說明顯而易見(即使用TransortWithMessageCredential),您確實幫助我簡化了我的代碼並刪除了對證書的依賴關係 - 再次感謝! – 2012-04-19 13:23:16