我有一個ASP.NET應用程序在多個IIS6 Web服務器上運行,並帶有SQL Server 2005數據庫後端。選擇一個Web應用程序實例來執行由外部事件觸發的任務?
我需要:
監控的外部作業事件的完成的數據庫,然後
恰好有一個Web應用程序實例提交一些信息Web服務
對於(1)它似乎是一個SqlDependency將是最好的方法(或只是普通的舊輪詢)。每個Web應用程序實例在啓動時都會註冊這種依賴關係。 (我不想配置一個'主'實例,因爲該實例的失敗將意味着任務不會繼續,即使其他實例可用。因此,我的設計是確保如果有實例可用(2)我一直在考慮在數據庫中有一些標誌,Web應用程序實例在(1)中收到SqlDependency通知後嘗試更新它們,沿着以下行(大大簡化):
UPDATE StatusTable SET TaskStatus = 1 WHERE TaskStatus = 0
SELECT @@ROWCOUNT
的想法是,只有一個應用程序實例將已經能夠更新TaskStatus,並且因此只有一個實例將具有@@ ROWCOUNT> 0。這將該n是'選舉'將信息提交給Web服務的實例。
這種方法的不足之處是什麼?我的其他選擇是什麼? (注意:做這項工作的單獨服務不是一種選擇。)
我不確定我關注...爲什麼會有多個通知?外部事件保證只觸發一次(工作完成後,表中的狀態將會改變)。 在任何情況下,不管上述情況如何,我不知道SQL Server的排隊功能,並明確使用它們似乎更簡單!不幸的是,我不能控制這項工作,所以我將不得不通過與工作擁有者檢查他們是否願意改變事情來確定這是否是真正的選擇,但這當然是理想的解決方案。謝謝。 – rabidpebble 2010-03-05 11:52:22