2008-09-17 160 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

相关问题