【发布时间】:2010-09-10 05:39:28
【问题描述】:
我应该使用命名管道还是 .NET Remoting 与我机器上正在运行的进程进行通信?
【问题讨论】:
-
哇,我基本上只是问了同样的问题...stackoverflow.com/questions/84860/…
我应该使用命名管道还是 .NET Remoting 与我机器上正在运行的进程进行通信?
【问题讨论】:
WCF 是最佳选择。支持a number of different transport mechanisms(includingNamedPipes),可以完全配置驱动。我强烈建议您看看 WCF。
这是一个写WCF vs Remoting performance comparison的博客。
引自博客:
WCF 和 .NET Remoting 在性能上确实不相上下。差异是如此之小(测量客户端延迟)以至于哪个更快一点并不重要。 WCF 虽然比 .NET Remoting 具有更好的服务器吞吐量。如果我要开始一个全新的项目,我会选择 WCF。无论如何,WCF 所做的远不止远程处理,而且我喜欢它的所有这些功能。
【讨论】:
如果它在一台机器上,命名管道可以为您提供更好的性能,并且可以使用remoting infrastructure 以及 WCF 来实现。或者你可以直接使用System.IO.Pipes。
【讨论】:
如果你的意思是进程间通信,我使用 .NET Remoting 到目前为止没有任何问题。如果这两个进程在同一台机器上,那么通信是相当快的。
命名管道肯定更高效,但它们至少需要设计一个基本的应用程序协议,这可能不可行。远程处理允许您轻松调用远程方法。
【讨论】:
.NET Framework 2.0 中的远程处理为同一台机器内的进程间通信提供了IPC 通道。
【讨论】:
如果您使用的是 .NET Framework 3.0 或更高版本,我会使用 WCF。使用 WCF,您可以根据性能/互操作/等之间的权衡使用不同的绑定。你需要的。
如果性能不是很重要,并且您需要与其他 Web 服务技术互操作,那么您将希望使用 WS-HTTP 绑定。对于您的情况,您可以将 WCF 与 net-tcp 绑定或命名管道绑定一起使用。要么应该工作。
我个人的看法是,WCF 方法更简洁,因为您可以执行合同驱动的服务并专注于消息,而不是对象(我在这里基于 WCF/.NET Remoting 的默认编程模型进行概括) .我不喜欢通过网络发送对象,因为很多语义信息会丢失或不清楚。当您所做的只是像使用 WCF 一样发送消息时,将您的关注点与通信和单个节点组成的类/基础架构分开会变得更容易。
【讨论】:
WCF 还提供了灵活性。只需更改一些配置(绑定),您就可以在其他机器上拥有相同的服务,而不是在同一台机器上使用 IPC。因此,您的代码仍然很灵活。
【讨论】:
.Net 远程处理本身并不是一个协议。它可以让您选择要使用的协议:SOAP、命名管道等。
【讨论】:
.net 远程处理内置于 .net 中以进行内部进程通信。如果您使用它,他们将继续支持并可能在未来的版本中增强它。命名管道不会让您承诺在未来的 .net 版本中进行增强
【讨论】: