我有一个在多个 IIS6 Web 服务器上运行的 ASP.NET 应用程序,带有一个 SQL Server 2005 数据库后端。
我需要:
监视数据库以完成外部作业事件,然后
让一个 Web 应用程序实例向 Web 服务提交一些信息
对于(1),似乎 SqlDependency 是最好的方法(或者只是普通的旧轮询)。每个 Web 应用程序实例在启动时都会注册这样的依赖项。(我不想配置“主”实例,因为该实例的失败将意味着任务不会继续,即使其他实例可用。因此我的设计是确保如果有可用的实例工作,那么工作应该继续进行。)
对于 (2),我一直在考虑在数据库中设置某种标志,Web 应用程序实例在收到 (1) 中的 SqlDependency 通知后会尝试更新,如下所示(非常简化):
UPDATE StatusTable SET TaskStatus = 1 WHERE TaskStatus = 0
SELECT @@ROWCOUNT
这个想法是只有一个应用程序实例能够更新TaskStatus,因此只有一个实例的@@ROWCOUNT > 0。这将是“选择”将信息提交给Web服务的实例。
这种方法有哪些不足之处?我还有哪些其他选择?(注意:不能选择单独的服务来完成这项工作。)