我应该使用命名管道还是.NET Remoting与我机器上正在运行的进程进行通信?
答案 0 :(得分:58)
WCF是最佳选择。它支持a number of different transport mechanisms(including Named Pipes)并且可以完全由配置驱动。我强烈建议你看一下WCF。
这是一个执行WCF vs Remoting performance comparison的博客。
博客引用:
WCF和.NET Remoting的性能真的相当。差异非常小(测量客户端延迟),哪一个更快一点并不重要。 WCF虽然比.NET Remoting具有更好的服务器吞吐量。如果我要开始全新的项目,我会选择WCF。无论如何,WCF做的远远超过Remoting以及我喜欢的所有功能。
答案 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)