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

时间:2008-09-17 16:05:22

标签: c# .net process ipc

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

8 个答案:

答案 0 :(得分:58)

WCF是最佳选择。它支持a number of different transport mechanismsincluding Named Pipes)并且可以完全由配置驱动。我强烈建议你看一下WCF。

这是一个执行WCF vs Remoting performance comparison的博客。

博客引用:

  

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

MSDN Section for WCF

答案 1 :(得分:15)

如果它在一台机器上,命名管道会为您提供更好的性能,并且可以使用remoting infrastructure和WCF实现。或者您可以直接使用System.IO.Pipes

答案 2 :(得分:5)

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

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

答案 3 :(得分:3)

.NET Framework 2.0中的远程处理为同一台计算机内的进程间通信提供了 IPC通道

答案 4 :(得分:3)

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

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

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

中为您提供增强功能