两个独立应用程序之间的通信

Posted

技术标签:

【中文标题】两个独立应用程序之间的通信【英文标题】:Communication between two separate applications 【发布时间】:2009-08-11 20:41:33 【问题描述】:

我开发了一个从数据库读取数据的 Windows 服务,该数据库是通过 ASP.net MVC 应用程序填充的。

我需要通过向数据库发出选择查询来使服务重新加载内存中的数据。此重新加载将由 Web 应用程序触发。我已经想到了一些方法来实现这一点,例如远程处理、MSMQ 或只是让服务在套接字上侦听重新加载命令。

我只是在寻找关于什么是最好的方法的建议。

【问题讨论】:

【参考方案1】:

通知必须有多可靠?如果通知丢失(假设通信管道在路由器中发生故障并丢弃套接字),世界末日会到来还是照常营业?如果服务停止,来自网站的通知是否需要排队等待它启动,或者它们可以安全地丢弃?

您需要它越可靠,就越需要采用排队解决方案 (MSMQ)。如果可靠性不是问题,那么您可以从各种非排队解决方案(远程处理、TCP、UDP 广播、HTTP 调用等)中进行选择。

您是否关心安全性?您是否害怕攻击者将您的“刷新” ping 死,如果不是更糟的话,至少会导致 DoS?您想对发出“刷新”调用的网站进行身份验证吗?您需要通知的隐私(即加密)吗? UDP 更难保护(无会话)。

该解决方案是否必须允许在现场轻松部署、配置和管理(即,是独立的、打包的产品)还是一次性部署,如果发生变化,可以“及时”修复?

在不了解所有这些因素的细节的情况下,很难说“使用 X”。至少有一件事是肯定的:远程处理现在有点过时了。

我的建议是使用 WCF,因为可以轻松地即时更改绑定,因此您可以测试各种配置(TCP、网络管道、http)而无需更改任何代码。

顺便说一句,您是否考虑过使用Query Notifications 来检测数据更改,而不是来自网站的主动通知?我认为这是在黑暗中的一击,但许多数据库都存在等效的活动缓存支持。

【讨论】:

那里有很多很棒的信息,非常感谢。这不是业务关键,所以我不关心排队的通知。我将研究 WCF 路线,尽管我对它的经验非常有限。查询通知看起来也很有趣。 试一试WCF,值得。如果没有 WCF,则 TCP 甚至 UDP 广播。远程处理和 MSMQ 似乎有点矫枉过正。【参考方案2】:

只需在 Windows 服务中托管 WCF 服务。您可以使用netTcpBinding 进行绑定,它将使用 TCP/IP 上的二进制文件。这将比套接字简单得多,但更易于开发和维护。

【讨论】:

这是我没有考虑过的一个选项,感谢您的建议,我会研究一下。【参考方案3】:

我会使用标准的 TCP 套接字 - 这可以承受各种组件的移动,并最大限度地减少配置问题恕我直言。

【讨论】:

以上是关于两个独立应用程序之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

两个独立的 Heroku(Node 后端和 React 前端)之间的通信?

在使用 Unity3d 开发的通用应用程序和独立应用程序之间建立通信

在两个独立的程序之间传递信息

两个独立组件之间的通信 angular 2

两个线程c ++之间的boost asio通信

Java EE 应用程序之间的 Web 服务通信