我应该使用命名管道还是 .NET Remoting 与我机器上正在运行的进程进行通信?
8 回答
WCF 是最好的选择。它支持许多不同的传输机制(包括 命名 管道),并且可以完全由配置驱动。我强烈建议您看一下 WCF。
这是一个进行WCF 与 Remoting 性能比较的博客。
来自博客的引述:
WCF 和 .NET Remoting 在性能上确实相当。差异是如此之小(测量客户端延迟)以至于哪个更快一点并不重要。WCF 虽然比 .NET Remoting 具有更好的服务器吞吐量。如果我要开始一个全新的项目,我会选择 WCF。无论如何,WCF 所做的远不止远程处理,而且我喜欢它的所有这些功能。
如果它在单台机器上,命名管道可以为您提供更好的性能,并且可以使用远程处理基础结构和 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 版本中进行增强