2

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

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

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

4

3 回答 3

2

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

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

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

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

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

我的建议是使用 WCF,因为可以轻松地动态更改绑定,因此您可以在不更改任何代码的情况下测试各种配置(TCP、网络管道、http)。

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

于 2009-08-11T21:00:40.327 回答
1

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

于 2009-08-11T20:56:07.527 回答
0

我会使用标准的 TCP 套接字——这将在各种组件的移动中存活下来,并最大限度地减少配置问题恕我直言。

于 2009-08-11T20:48:07.963 回答