.NET 进程间通信的最佳选择是啥? [关闭]
Posted
技术标签:
【中文标题】.NET 进程间通信的最佳选择是啥? [关闭]【英文标题】:What is the best choice for .NET inter-process communication? [closed].NET 进程间通信的最佳选择是什么? [关闭] 【发布时间】:2008-09-17 16:05:21 【问题描述】:我应该使用命名管道还是 .NET Remoting 与我机器上正在运行的进程进行通信?
【问题讨论】:
哇,我基本上只是问了同样的问题...***.com/questions/84860/… 【参考方案1】:WCF 是最佳选择。支持a number of different transport mechanisms(includingNamedPipes),可以完全配置驱动。我强烈建议您看看 WCF。
这是一个写WCF vs Remoting performance comparison的博客。
引自博客:
WCF 和 .NET Remoting 在性能上确实不相上下。差异是如此之小(测量客户端延迟)以至于哪个更快一点并不重要。 WCF 虽然比 .NET Remoting 具有更好的服务器吞吐量。如果我要开始一个全新的项目,我会选择 WCF。无论如何,WCF 所做的远不止远程处理,而且我喜欢它的所有这些功能。
MSDN Section for WCF
【讨论】:
支持远程处理的进一步证据。来自 Microsoft remoting/WCF 团队的某个人:“Remoting 的开发投资非常少。WCF 是 Remoting 的继承者。”从这里***.com/questions/1294494/…【参考方案2】:如果它在一台机器上,命名管道可以为您提供更好的性能,并且可以使用remoting infrastructure 以及 WCF 来实现。或者你可以直接使用System.IO.Pipes。
【讨论】:
【参考方案3】:如果您的意思是进程间通信,我使用 .NET Remoting 到目前为止没有任何问题。如果这两个进程在同一台机器上,那么通信是相当快的。
命名管道肯定更高效,但它们至少需要设计一个基本的应用程序协议,这可能不可行。远程处理允许您轻松调用远程方法。
【讨论】:
命名管道上的 WCF 也允许这样做。您可以在两个流程中使用相同的合同程序集。【参考方案4】:.NET Framework 2.0 中的远程处理为同一台机器内的进程间通信提供了IPC 通道。
【讨论】:
【参考方案5】:如果您使用的是 .NET Framework 3.0 或更高版本,我会使用 WCF。使用 WCF,您可以根据性能/互操作/等之间的权衡使用不同的绑定。你需要的。
如果性能不是很重要,并且您需要与其他 Web 服务技术互操作,那么您将希望使用 WS-HTTP 绑定。对于您的情况,您可以将 WCF 与 net-tcp 绑定或命名管道绑定一起使用。要么应该工作。
我个人的看法是,WCF 方法更简洁,因为您可以执行合同驱动的服务并专注于消息,而不是对象(我在这里根据 WCF/.NET Remoting 的默认编程模型进行概括) .我不喜欢通过网络发送对象,因为很多语义信息会丢失或不清楚。当您所做的只是像使用 WCF 一样发送消息时,将您的关注点与通信和单个节点组成的类/基础架构分开会变得更容易。
【讨论】:
【参考方案6】:WCF 还提供了灵活性。只需更改一些配置(绑定),您就可以在其他机器上拥有相同的服务,而不是在同一台机器上使用 IPC。因此,您的代码仍然很灵活。
【讨论】:
.NET 的 IPC API 列表:weblogs.asp.net/ricardoperes/…【参考方案7】:.Net 远程处理本身并不是一个协议。它可以让您选择要使用的协议:SOAP、命名管道等。
【讨论】:
【参考方案8】:.net 远程处理内置于 .net 中以进行内部进程通信。如果您使用它,他们将继续支持并可能在未来的版本中增强它。命名管道不会让您承诺在未来的 .net 版本中进行增强
【讨论】:
它们不太可能增强远程处理。来自远程处理/WCF 团队的某个人:“远程处理的开发投资非常少。WCF 是远程处理的继承者。”从这里***.com/questions/1294494/…以上是关于.NET 进程间通信的最佳选择是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Java 和 .NET 3.5 之间进程间通信的最佳方法是啥?
通过进程间通信将停止参数从.NET应用程序传递给服务的最佳技术是啥?
在 .NET 中,同一台机器上的两个进程进行通信的最佳方式是啥?