2009-06-09 44 views
1

我目前正在學習WF框架,所以請耐心等待;主要是我在尋找其中開始尋找,不一定是直接的答案。我似乎無法弄清楚如何開始研究我在Google中的內容。Windows工作流:持久性和輪詢

比方說,我有一個簡單的一步工作流程(比這更復雜,但爲了簡單起見)。此工作流程需要監視數據庫中的某個記錄,以查看數據庫何時更改。當行更改時,我無法通過數據庫中的觸發器「推送」,因此我需要頻繁地進行輪詢。

此工作流程需要持久保存到數據庫以防止重新啓動,以及這是一個長時間運行的工作流程。我試圖找出最好的方法讓它每隔3分鐘左右檢查一次,並堅持數據庫。框架的持久性功能是否允許這樣做?它似乎是基於時間的。而且由於工作流程不會被外部事件重新喚醒,它是如何從數據庫重新加載並檢查它以前再次執行的同一步驟?它是否會在重新加載時自動嘗試上次未執行的活動?

延遲附加的「while」活動可以工作,還是隻能通過持久性服務來處理?

回答

1

我不確定你的意思是「通過持久性服務處理soley」嗎?持久性僅指空閒工作流程的存儲。

您可以在While循環中的Sequence中使用Delay和Code活動。在延遲時間內,工作流程將變爲空閒狀態,並可能在必要時保留。然而,取決於在堅持工作流程時需要多少狀態以及/或者您在任何一個時間運行多少個這樣的工作流程可能意味着需要更精簡的方法。

更簡潔的方法是將數據庫外部化,並在發生期望的更改時讓一些「數據庫監視」工作流服務引發事件。該服務將被添加到Workflow運行時。

爲此,您需要一個由Inteface和[ExternalDataExchange]屬性定義的服務契約。該接口反過來定義了一個事件,即在檢測到所需的DB更改時服務將會引發。它還定義了一個Workflow可以調用的方法,以指定該服務應該查找哪些更改。該方法應該接受一個實例GUID,以便在檢測到DB更改時找到請求實例。

在您使用CallExternalMethodActivity調用此服務方法的工作流程中。然後流向監聽事件的HandleExternalEventActivity。此時,工作流程將閒置並可以保留。它將一直存在,直到服務提出事件。

+0

我非常喜歡這種方法。它清除了我在這個框架中遇到的一些架構問題。謝謝! – Chris 2009-06-10 16:38:47