[英]How do I cancel and roll back part of a workflow
我有一個很長的工作流程,可以在視頻處理設備之間移動視頻文件,然后將文件狀態報告給用於驅動UI的數據庫
有時用戶按下UI上的按鈕以“接受”文件到視頻存儲服務器中。 這涉及將文件從一台服務器復制到另一台服務器。
他們詢問是否可以取消此活動。
我查看了wf4文檔,我看不到回滾部分工作流的方法。
這是可能的,我應該使用什么技術。
這是恢復工作的兩個基本的內部活動。
使用Compensable活動,您可以向補償處理程序添加活動以撤消先前完成的工作。 Compensate活動可用於觸發補償。 如果沒有補償,您將在工作流程結束時或在使用Conform活動時獲得確認處理程序。
有關詳細信息,請參閱Matt Milner的.NET 4中的Windows Workflow Foundation(WF)簡介 。
不確定我是否完全理解你的場景,但我認為你需要在異步線程上運行你的傳輸過程,不時檢查一個“取消”變量來執行回滾。 可以在UI的主線程上修改此變量。
當然,這將允許您在轉移之間取消,而不是在單次轉移中取消。
好的,所以我們首先要說,“回滾”已經上傳的內容的處理必須手工完成,所以無論你在哪里儲存這些塊,你都需要在取消時手工清理。
現在,關於工作流本身,在我看來,你可以像這樣設置你的FlowChart
:
好吧,讓我們分解這個工作流程。 整個服務應該與某個客戶端密鑰相關聯,這樣您就可以通過每個客戶端Start
一次來啟動服務,從而降低啟動成本。
接下來,當所述客戶端想要開始傳輸時,您將調用BeginTransfer
,它將進入傳輸循環。 設置傳輸循環,以便在必要時通過調用CancelTransfer
取消塊之間的取消。
在這個模型中,同樣的分支也用於完成傳輸,因為它離開循環,所以當你完成傳輸塊時只需調用CancelTransfer
(如果你不喜歡它只是設置一個看起來完全不同的分支)相同)。
最后,當您進入流程循環時,您可以SoftExit
整個工作流程並將其關閉,以便在有必要的維護時可以輕松地殺死它, 或者當客戶端完成其連接時,它需要調用SoftExit
來處理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.