大型项目中进程间通信的最佳和最简单方法

Posted

技术标签:

【中文标题】大型项目中进程间通信的最佳和最简单方法【英文标题】:Best and Easiest Method for inter-process communication in large project 【发布时间】:2009-04-21 18:58:52 【问题描述】:

在一个非常大的项目中,可用于进程间通信的最佳和最简单的方法是什么?

我的要求是在普通的 Windows 窗体应用程序和 Windows 服务之间进行通信。

易于维护和实施的方法是首选。

谢谢

【问题讨论】:

【参考方案1】:

从标签中我了解到我们正在谈论 .NET。也许您应该尝试 Microsoft WCF。它统一了这个问题,从实际代码中抽象出特定的进程间(服务间)通信技术。因此,通常您将设计和编写您的进程将用来相互通信的接口,然后您将在 XML 配置文件中配置特定的通信技术。也就是说,您在“进程谈论什么”和“具体如何实现这种通信”之间有相当明确的区别。

WCF 支持 SOAP、TCP\IP 通信、MSMQ 等,您的进程可以是 IIS 托管的 Web 服务、通常的 Windows 服务、控制台应用程序等——所有这些都在统一的框架下。我想,这正是你要找的。​​p>

【讨论】:

他也说很简单。对于我认为的任何 MS 产品,WCF 都有最糟糕的绑定和设置噩梦。当服务器是域的一部分时,尝试让匿名服务连接 - 您必须编辑系统注册表!确认! 嗯,我不熟悉你的具体情况,所以我不能争论......但从我所见,WCF 配置相当直观且有据可查。并且通常与 Microsoft 产品和框架一样,如果您的场景是 Microsoft 场景中描述的场景之一,那么事情几乎可以开箱即用(与许多第 3 方解决方案不同)。无论如何,我认为值得一试。【参考方案2】:

这真的取决于项目,因为有大量的方法。

这可能取决于项目不同部分的运行位置(它们可能运行在不同的服务器上,或完全不同的技术堆栈上。)。

最常见的方法可能是网络服务。虽然这些都会带来开销,但通过 DLL 研究一个简单的接口 API 可能是值得的。

无论您做什么,都应该仔细考虑和设计,考虑安全性和性能,以及您将来如何扩展或修改它。

【讨论】:

【参考方案3】:

不一定是最好的或最简单的......

在 .NET 世界中尝试 MSMQ 或 IBM MQ 消息队列中间件。

如果通信主要是单向的,那么考虑使用 WCF 服务,如果您让 Visual Studio 中的代码生成器为您完成大部分工作,这既好又容易。

【讨论】:

WCF 还支持 2 路(双工)通信,有几个提供的绑定支持 - 请参阅 wsDualHttpBinding、netNamedPipeBinding,当然还有 netTcpBinding 和其他一些...请参阅此处:msdn.microsoft.com/en-us/library/ms730879.aspx

以上是关于大型项目中进程间通信的最佳和最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

对等多点进程间通信

进程间通信(IPC)——Unix域套接字 VS 网络套接字

.NET 进程间通信的最佳选择是啥? [关闭]

.NET 进程间通信的最佳选择是啥? [关闭]

实验8 进程间通信

实验八进程间通信