我开发了一个从数据库读取数据的Windows服务,数据库通过ASP.net MVC应用程序填充。
我需要通过向数据库发出select查询来使服务重新加载内存中的数据。此重新加载将由Web应用程序触发。我想到了几种方法来实现这一点,例如远程处理,MSMQ,或者只是让服务侦听套接字以获取重新加载命令。
我只是在寻找有关最佳方法的建议。
答案 0 :(得分:2)
通知的可靠性如何?如果通知丢失(假设通信管道在路由器中有一个hickup并丢弃套接字),世界将会结束或照常营业吗?如果服务已关闭,那么来自网站的通知是否会在启动时排队等待,或者可以安全地丢弃?
您需要的可靠性越高,您就越需要采用排队解决方案(MSMQ)。如果可靠性不是问题,那么您可以选择非排队解决方案的镜像(远程处理,TCP,UDP广播,HTTP呼叫等)。
你关心安全吗?您是否害怕攻击者对您的“刷新”致死,如果不是更糟,至少会导致DoS?您想要对进行“刷新”呼叫的网站进行身份验证吗?您需要隐私通知(即加密)吗? UDP更难以保护(无会话)。
该解决方案是否允许在现场轻松部署,配置和管理(即,是独立的,打包的产品),还是一次性部署,如果发生变化,可以“及时”修复?
了解所有这些因素的细节,很难说“使用X”。至少有一点是肯定的:到目前为止,远程处理已经过时了。
我的建议是使用WCF,因为它可以在运行时轻松更改绑定,因此您可以测试各种配置(TCP,网络管道,http),无需更改代码。
是的,您是否考虑使用Query Notifications来检测数据更改,而不是来自网站的有效通知?我认为这是一个黑暗的镜头,但许多数据库都存在等效的主动缓存支持。答案 1 :(得分:1)
只需在Windows服务中托管WCF服务即可。您可以使用netTcpBinding
进行绑定,这将使用TCP / IP上的二进制文件。这比插座简单得多,但更容易开发和维护。
答案 2 :(得分:0)
我使用标准的TCP套接字 - 这将在各种组件移动中存活下来,并最大限度地减少配置问题恕我直言。