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

87

我应该使用命名管道还是.NET远程调用来与我的计算机上运行的进程通信?


1
哇,我基本上问了完全相同的问题... - Kris Erickson
8个回答

58

WCF是最佳选择。它支持许多不同的传输机制包括 命名 管道),可以完全基于配置驱动。我强烈建议您查看WCF。

这里有一篇博客,对比了WCF与Remoting的性能

博客中的一句话:

WCF和.NET Remoting在性能方面真的是可以相互比较的。它们之间的差异非常小(测量客户端延迟),以至于哪个更快并不重要。但是,WCF的服务器吞吐量比.NET Remoting要好得多。如果我要开始一个全新的项目,我会选择WCF。无论如何,WCF比Remoting做得更多,对于所有这些功能,我都喜欢它。

WCF的MSDN部分


1
远程传输的进一步证据。来自微软远程传输/ WCF团队的某人表示:“在Remoting上的开发投入非常有限,WCF是Remoting的继承者。”来源于此处https://dev59.com/-nM_5IYBdhLWcg3wn0vT - MarkJ

14

4
如果您指的是进程间通信,我迄今为止使用.NET Remoting没有遇到任何问题。如果两个进程在同一台机器上,通信速度非常快。
命名管道肯定更有效率,但它们需要设计至少一个基本的应用程序协议,这可能不可行。Remoting允许您轻松调用远程方法。

4
WCF通过命名管道也可以实现这一点。你可以在两个进程中使用相同的契约程序集。 - Kent Boogaart

3
如果你使用的是.NET Framework 3.0或以上版本,我建议使用WCF。使用WCF,你可以根据性能/互操作性等方面的权衡选择不同的绑定方式。
如果性能不是关键,而且需要与其他Web服务技术进行互操作,那么你应该使用WS-HTTP绑定。对于你的情况,你可以使用net-tcp绑定或named-pipe绑定来使用WCF。两者都可以。
我的个人看法是,WCF方法更加清晰,因为你可以使用基于合同的服务,并专注于消息,而不是对象(这里是基于WCF/.NET Remoting的默认编程模型做出的概括)。我不喜欢通过网络发送对象,因为很多语义信息会丢失或不清楚。当你只是像使用WCF一样发送消息时,就容易将通信和单个节点组成的类/基础设施分开处理。

2

WCF 还提供了灵活性。只需更改一些配置(绑定),您就可以将相同的服务放在其他机器上,而不是在同一台机器上的 IPC。因此,您的代码保持灵活性。


一个针对.NET的IPC API列表:http://weblogs.asp.net/ricardoperes/local-machine-interprocess-communication-with-net - Ricardo Peres

2

.NET Framework 2.0 中的远程调用为同一台计算机上的进程间通信提供IPC通道


1

.Net Remoting并非一个自成体系的协议,它允许您选择使用哪种协议:SOAP、命名管道等。


0

.NET Remoting是内置于.NET中的用于内部进程通信的技术。如果您使用它,他们将在未来版本中继续支持并可能增强它。而命名管道则不能保证在未来的.NET版本中会有增强功能。


2
不太可能他们会增强远程调用。来自远程调用/WCF团队的某个人说:“我们在远程调用方面的开发投资非常有限。WCF是远程调用的继承者。” 参考链接:https://dev59.com/-nM_5IYBdhLWcg3wn0vT - MarkJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接