<edit>
要回答你的問題上建立一個基於代理的模式,即在我看來,最好的辦法。它使調試和維護變得更容易,同時分離出整個操作的「驅動程序」(即,您可以換出WF並用另一個設備替換它)。
</edit>
WF4可用於驅動您的長時間運行的業務邏輯。我使用的最佳方法是一個簡單地啓動「代理進程」的工作流程,並且在代理正在工作時,WF實例休眠等待被代理喚醒。
概括地說,像這樣的方法:
- 有一個「編排」的過程,負責啓動新的工作流程和保溼堅持工作流程。
- 並有一個「代理」進程(或進程),實際上運行你長時間運行的任務。
的編排流程
這個過程是充電開始一個全新的流實例的。您的工作流程只需啓動代理程序即可完成實際工作。工作流實例會休眠。
此過程還會等待恢復休眠工作流實例的請求。從本質上講,工作流實例只會「運行」很短的時間,並將實際工作委託給其他線程/進程。
實施編排流程的一種方式是作爲Web服務。代理程序完成後,代理程序可以輕鬆回調它以喚醒沉睡的工作流程實例。
在代理過程中
這個過程中會有執行工作的實際訣竅。當由編排過程調用時,會給它一些信息以知道應該執行哪個上下文(即業務對象)。完成後,代理通知編排流程已完成。
回到編排流程
當代理完成了它的任務,它使一個電話回編排流程的情況下準備繼續前進到下一項在流動。然後,編排過程將水合該上下文的工作流程,並恢復它。
工作流程可能會決定另一個長時間運行的任務接下來啓動,從而激活另一個代理程序進程以委託任務,然後再次休眠該工作流程實例。此循環將繼續,直到工作流實例結束。
「動態」工作流部分
我想你指的是更新的「正在進行中」的工作流程,對不對?如果是這樣,WF4.5有這個能力。我從來沒有實現過(但),但從我讀過的內容來看,這是可行的。
該概念涉及添加一些關於您正在執行的工作流版本的元數據。 WF將負責啓動一個動態活動更新,您可以通過它進行協調。
他們真的是不同的東西,我不是很熟悉WF4的呃......我個人會從WF4開始,「這可能需要幾個小時」聽起來像生活在工作流世界中的東西,所有「long running transatction」類型的花裏胡哨 – user2088029
看起來WF4有一個分歧的觀點:https://stackoverflow.com/questions/104099/when-to-use-windows-workflow-foundation(看第二個答案)和https://stackoverflow.com/questions/513657/why-use-windows-workflow – Mario