2013-05-17 43 views
4

我需要創建一個C#程序,它可以在我們的本地Windows客戶機上運行。這些'客戶'程序將不得不從另一臺機器上運行的'管理員'程序中接收命令。 這些命令可能是重新啓動客戶端計算機,返回一些關於IP地址的本地信息等回到'管理員'程序。使用什麼? WCF或套接字?在C#程序中

但是如何做到這一點?我對WCF有一些瞭解,但這是否正確? 如果我使用WCF,那麼我將不得不讓客戶端程序像每一秒一樣運行服務方法來檢查新命令。通過套接字,我建立了一個'直接'連接,客戶端只是等待命令接收 - 是不是正確的理解?

哪種方式對我來說是正確的方式?

我們正在談論~10個客戶端,我想要1秒的最大延遲(發送命令 - 接收信息)。

任何提示也將不勝感激。

問候

+0

使用wcf,它比socket更容易,yor目標不需要高性能 –

回答

5

雙工WCF服務器。基本上,客戶端都連接到服務器(所以只有一臺服務器),並且服務器使用其雙工通道在需要時回撥給客戶端。沒有投票,規模很好,等等。你需要處理的最頭疼的事情是設置一個很長的超時時間,以防你一段時間不發送任何東西,以便頻道超時。

WCF最終會變得簡單得多。

的幾個環節:

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

http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF

我希望這些幫助。

+0

WCF中的雙工在沒有在客戶端打開端口的情況下工作嗎?有沒有一個支持這個的綁定? – usr

+0

Ah NetTcpBinding支持這個。在這種情況下,這是迄今爲止最好的答案。 – usr

+0

是的,正如你的研究所說的那樣,NetTcpBinding在不打開客戶端端口的情況下支持這一點。如果這很重要,您也可以使用證書或Active Directory來保護/加密它。 –

1

可以使WCF客戶端充當服務器,並與指揮控制&程序連接到他們,是沒有問題的。如果你不想弄糟套接字可以帶來的醜陋東西,那就去WCF吧。 WCF可以在app.config中很好地配置,並且可以使它成爲真正的自託管命令行應用程序,所以不需要IIS服務器。配置將是可重用的並且更容易維護。

1

你可以使用.NET遠程處理,可提供從服務器到客戶端(使用「回調」),「推」反向通道。它不需要另一個方向的第二個TCP連接,所以你不需要搞亂客戶端的防火牆和路由器。

遠程處理被認爲是一種過時,但它有它的地方。

在任何情況下,我都不會使用WCF輪詢技術。這會導致服務器出現延遲和DDOS情況。

如果你可以讓客戶端打開一個端口,那麼託管一個WCF服務可能是最好的主意。

1

與小數量的機器,你提到的性能要求不太高的,我覺得WCF竟又比插座容易。

您可能會看到雙面WCF。我從來沒有使用它,WCF給了我頭痛在過去,我需要什麼不尋常的任何時間,但它是排序的問題,你在談論。

如果所有的機器都在同一網絡上,這裏是通過消息隊列鬆散的靈感創意一個選擇:你可以使用一個數據庫表爲其中消息出現,並在他們的休閒客戶端得到讀的地方。客戶端可以查詢它並說:讓我所有消息在MessageID> LastReceivedMessageID。 (a)儘管你的數據庫服務器應該能夠處理它,但(b)如果你可能需要在網絡外部使用這個,你仍然需要一個輪詢VPN或新的解決方案。

1

我會推薦一個套接字實現,因爲從長遠來看它可能會給你更大的靈活性。您可以使用socket命名空間從頭開始創建它。作爲替代方案,您可以使用現成的網絡庫解決方案。結帳lidgrenNetworkComms.Net

聲明:我是NetworkComms.Net的開發人員。

相關問題