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

有帮助吗?

解决方案

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

这是一个博客,它做了一个 WCF 与 Remoting 性能比较.

引用博客中的一段话:

WCF 和.NET Remoting 在性能上确实不相上下。差异非常小(测量客户端延迟),以至于哪个更快一点并不重要。不过,WCF 的服务器吞吐量比 .NET Remoting 好得多。如果我要开始全新的项目,我会选择 WCF。无论如何,WCF 的功能远不止远程处理,而且我喜欢它的所有这些功能。

MSDN WCF 部分

其他提示

如果它在单台机器上,命名管道可以为您提供更好的性能,并且可以使用 远程基础设施 以及 WCF。或者你可以直接使用 系统.IO.管道.

如果你指的是进程间通信,到目前为止我使用 .NET Remoting 没有任何问题。如果两个进程在同一台机器上,通信速度相当快。

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

.NET Framework 2.0 中的远程处理提供了 工控通道 用于同一台机器内的进程间通信。

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

如果性能并不重要并且您需要与其他 Web 服务技术进行互操作,那么您将需要使用 WS-HTTP 绑定。对于您的情况,您可以将 WCF 与 net-tcp 绑定或命名管道绑定结合使用。两者都应该有效。

我个人的看法是,WCF 方法更干净,因为您可以执行契约驱动的服务并专注于消息,而不是对象(我在这里基于 WCF/.NET Remoting 的默认编程模型进行概括)。我不喜欢通过网络发送对象,因为很多语义信息会丢失或不清楚。当您所做的只是像使用 WCF 一样发送消息时,您可以更轻松地将通信和单个节点组成的类/基础设施之间的关注点分开。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top