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