У меня есть приложение ASP.NET, работающее на нескольких веб-серверах IIS6 с серверной частью базы данных SQL Server 2005.
Мне нужно:
отслеживать базу данных на предмет завершения события внешнего задания, а затем
только один экземпляр веб-приложения передает некоторую информацию веб-службе
Для (1) кажется, что SqlDependency был бы лучшим подходом (или просто простым старым опросом). Каждый экземпляр веб-приложения регистрирует такую зависимость при запуске. (Я не хочу настраивать «главный» экземпляр, потому что сбой этого экземпляра будет означать, что задача не будет выполнена, даже если доступны другие экземпляры. Таким образом, моя задача - обеспечить наличие экземпляра, доступного для выполнения. работа, тогда работа должна продолжаться.)
Для (2) я имел в виду наличие какого-то флага в базе данных, который экземпляры веб-приложения пытаются обновить, как только они получают уведомление SqlDependency в (1), по следующей строке (значительно упрощенной):
UPDATE StatusTable SET TaskStatus = 1 WHERE TaskStatus = 0
SELECT @@ROWCOUNT
Идея состоит в том, что только один экземпляр приложения мог бы обновить TaskStatus, и, таким образом, только один экземпляр имел бы @@ ROWCOUNT> 0. Тогда это был бы экземпляр, «выбранный» для передачи информации в Интернет. сервис.
Каковы недостатки этого подхода? Какие у меня есть другие варианты? (Примечание: отдельный сервис, выполняющий эту работу, не является опцией.)