it-swarm.cn

.NET进程间通信的最佳选择是什么?

我应该使用命名管道或.NET Remoting与我的机器上正在运行的进程通信吗?

81
mrbradleyt

WCF是最好的选择。它支持 许多不同的传输机制包括命名管道 ),并且可以完全由配置驱动。我强烈建议你看一下WCF。

这是一个博客,它执行 WCF与Remoting性能比较

博客引用:

WCF和.NET Remoting的性能确实相当。差异非常小(测量客户端延迟),哪一个更快一点并不重要。 WCF虽然比.NET Remoting具有更好的服务器吞吐量。如果我要开始全新的项目,我会选择WCF。无论如何,WCF比Remoting做得更多,而且我喜欢它的所有功能。

WCF的MSDN部分

58
Eric Schoonover

如果它在一台机器上,Named Pipes可以为您提供更好的性能,并且可以使用 远程处理基础架构 以及WCF实现。或者你可以直接使用 System.IO.Pipes

15
Mark Cidade

如果你的意思是进程间通信,我到目前为止使用.NET Remoting没有任何问题。如果两个进程在同一台机器上,则通信速度非常快。

命名管道肯定更有效,但它们需要至少设计一个基本的应用程序协议,这可能是不可行的。远程处理允许您轻松调用远程方法。

5
Dario Solera

如果您使用的是.NET Framework 3.0或更高版本,我会使用WCF。使用WCF,您可以使用不同的绑定,这取决于性能/互操作/等之间的权衡。你需要的。

如果性能不重要且您需要与其他Web服务技术互操作,则需要使用WS-HTTP绑定。对于您的情况,您可以将WCF与net-tcp绑定或命名管道绑定一起使用。要么应该工作。

我个人认为WCF方法更干净,因为你可以做契约驱动的服务并专注于消息,而不是对象(我在这里基于WCF/.NET Remoting的默认编程模型进行概括)。我不喜欢通过网络发送对象,因为很多语义信息丢失或不清楚。当您所做的就是发送类似于WCF的消息时,将通信与构成单个节点的类/基础结构之间的关注点分开会变得更加容易。

3
Jason Olson

.NET Framework 2.0中的远程处理提供了 IPC channel 用于同一台机器内的进程间通信。

3
icelava

WCF还提供灵活性。通过更改一些配置(绑定),您可以在其他计算机上使用相同的服务,而不是在同一台计算机上使用IPC。因此,您的代码仍然灵活。

1
Vikram I Code

.Net远程处理本身并不是一种协议。它允许您选择要使用的协议:SOAP,命名管道等。

1
Joel Coehoorn

.net远程处理内置于.net中进行内部进程通信。如果您使用它,它们将继续支持并可能在将来的版本中增强它。命名管道无法在未来的.net版本中为您提供增强功能

0
kemiller2002