什么是.NET进程间通信的最佳选择?
我应该使用命名管道还是.NET Remoting与我的机器上的正在运行的进程进行通信?
WCF是最好的选择。 它支持许多不同的传输机制 ( 包括 命名 管道 ),并且可以完全由配置驱动。 我强烈建议你看看WCF。
这是一个WCF与Remoting性能比较的博客。
来自博客的引用:
WCF和.NET Remoting在性能上相差无几。 差异非常小(测量客户端延迟),无论哪个更快一点都没有关系。 WCF虽然比.NET Remoting有更好的服务器吞吐量。 如果我会开始全新的项目,我会选择WCF。 无论如何,WCF不仅仅是Remoting,还有我喜欢的所有功能。
WCF的MSDN部分
如果它在一台机器上,Named Pipes可以提供更好的性能,可以使用远程处理基础结构以及WCF来实现。 或者你可以直接使用System.IO.Pipes 。
如果你的意思是进程间通信,那么到目前为止我使用.NET Remoting没有任何问题。 如果两个进程在同一台机器上,通讯速度相当快。
命名管道肯定是更高效的,但是它们至少需要设计一个基本的应用协议,这可能是不可行的。 远程处理允许您轻松地调用远程方法。
.NET Framework 2.0中的远程处理为同一台机器上的进程间通信提供了IPC通道 。
如果您使用.NET Framework 3.0或更高版本,我将使用WCF。 使用WCF,你可以使用不同的绑定,取决于性能/互操作性/等之间的折衷。 你需要的。
如果性能不重要,而且需要与其他Web Service技术进行互操作,则需要使用WS-HTTP绑定。 对于你的情况,你可以使用WCF与net-tcp绑定,或命名管道绑定。 要么工作。
我个人的看法是,WCF的方法是更干净,因为你可以做合同驱动的服务,并专注于消息,而不是对象(我在这里基于WCF / .NET Remoting的默认编程模型进行泛化)。 我不喜欢通过网络发送对象,因为很多语义信息丢失或不清楚。 当你所做的只是发送一条类似于WCF的消息时,就可以更容易地区分通信与单个节点组成的类/基础结构之间的关系。
.net远程处理本身并不是一个协议。 它可以让你选择使用哪种协议:SOAP,named-pipes等
WCF还提供了灵活性。 通过改变一些配置(绑定),你可以在其他机器上获得相同的服务,而不是在同一台机器上的IPC。 所以你的代码保持灵活。
.net远程处理内置于.net内部进程通信。 如果你使用它,他们将继续支持,并可能在未来的版本中加强它。 命名管道不会给你在.net的将来版本中增强的承诺