2008-09-17 156 views
77

我應該使用命名管道還是.NET Remoting與我的機器上正在運行的進程進行通信?.NET進程間通信的最佳選擇是什麼?

+1

哇我只是基本上問了一樣的問題... http://stackoverflow.com/questions/84860/how-to-communicate-with-a--windows-service-from-an-application-that -interacts-wi – 2008-09-17 16:07:15

回答

58

WCF是最好的選擇。它支持a number of different transport mechanismsincludingNamedPipes)並且可以完全由配置驅動。我強烈建議你看看WCF。

這是一個博客,做一個WCF vs Remoting performance comparison

從博客引述:

的WCF和.NET遠程處理在性能上真正具有可比性。差異非常小(測量客戶端延遲),無論哪個更快一點都沒關係。雖然WCF比.NET Remoting具有更好的服務器吞吐量。如果我會開始全新的項目,我會選擇WCF。無論如何,WCF遠不止Remoting以及我喜歡它的所有功能。

MSDN Section for WCF

+1

有利於遠程處理的進一步證據。從微軟遠程/ WCF團隊的某個角度來看:「Remoting有很少的開發投入,WCF是Remoting的繼任者。」從這裏http://stackoverflow.com/questions/1294494/is-net-remoting-really-deprecated – MarkJ 2009-08-27 12:31:24

0

.net遠程處理內置於.net內部進程通信。如果你使用它,他們將繼續支持並可能在未來的版本中加強它。命名管道沒有給你在未來版本的增強承諾.net

+2

不太可能會增強遠程處理。來自Remoting/WCF團隊的成員:「Remoting的開發投資很少,WCF是Remoting的繼任者。」從這裏http://stackoverflow.com/questions/1294494/is-net-remoting-really-deprecated – MarkJ 2009-08-27 12:30:27

5

如果你的意思是進程間通信,我使用.NET Remoting到目前爲止沒有任何問題。如果兩個進程位於同一臺機器上,則通信速度非常快。

命名管道確實更高效,但他們需要至少設計一個基本的應用協議,這可能是不可行的。遠程處理允許您輕鬆地調用遠程方法。

+3

WCF通過命名管道也可以。而且您可以在兩個流程中使用相同的合約組合。 – 2008-09-17 17:42:53

1

.net遠程處理本身並不是一個協議。它可以讓你選擇使用哪種協議:SOAP,named-pipes等。

3

遠程處理在.NET框架2.0提供了用於同一機器內的進程間通信的IPC 通道

3

如果您使用.NET Framework 3.0或更高版本,我將使用WCF。使用WCF,你可以使用不同的綁定,依賴於性能/互操作性/等等之間的折衷。你需要的。

如果性能不重要,並且您需要與其他Web Service技術進行互操作,則需要使用WS-HTTP綁定。對於你的情況,你可以使用WCF與net-tcp綁定或命名管道綁定。要麼應該工作。

我個人的看法是,WCF方法更乾淨,因爲您可以執行合同驅動的服務並專注於消息,而不是對象(我在此基於WCF/.NET Remoting的默認編程模型進行泛化)。我不喜歡通過網絡發送對象,因爲很多語義信息丟失或不清楚。當你所做的只是發送一條類似於WCF的消息時,將通信與單個節點組成的類/基礎結構之間的關注區分開來變得更加容易。

1

WCF還提供了靈活性。通過改變一些配置(綁定),你可以在其他機器上擁有相同的服務,而不是同一臺機器上的IPC。因此你的代碼保持靈活性。

+0

用於.NET的IPC API列表:http://weblogs.asp.net/ricardoperes/local-machine-interprocess - 通訊 - 用網 – 2015-10-16 13:21:05

相關問題