我们有一个ASP.NET网站,用户将项目添加到数据库。 在同一台服务器上有几个站点,每个站点都有自己的数据库。
我需要实现一种机制来检查数据库中每个项目的状态。 如果项目未处理,请将其提交给第三方Web服务。
我看到两个选项:
第一个选项的优点是代码知道要连接的数据库。
使用Windows服务时,必须了解所有数据库,因此维护起来比较困难。此外,如果我只有一个Windows服务,则必须使用线程并行处理每个数据库中的项目。
也许这两种方式还有另一种方法吗?
还有哪些问题,你会推荐什么? 请解释你的选择。
答案 0 :(得分:1)
这听起来像是一个涉及消息队列的好地方。每个项目都将包装成一条消息并放入队列中。 “项目处理器”(服务?)将订阅队列并在每个项目到达时执行一些工作。消息如何放在队列中取决于您,但是举个例子,您可以让每个站点将“新项目”消息发布到队列中。
一开始,队列可能是一个令人生畏的概念,但MassTransit等框架可以提供帮助。非常值得学习。
答案 1 :(得分:0)
我认为与Web应用程序相比,Windows服务是一个不错的选择,主要是因为某个Web应用程序必须由某人手动触发,而Windows服务可以随时运行,检查更新。
如果您可以访问每个现有网站的代码,还有另一种选择。为什么不编写将向第三方Web服务提交数据的Web服务。然后在每个现有网站中,修改存储数据库中更改的逻辑,以便将更改发布到自定义Web服务(甚至跳过自定义WS并直接调用第三方)。