簡體   English   中英

如何取消和回滾部分工作流程

[英]How do I cancel and roll back part of a workflow

我有一個很長的工作流程,可以在視頻處理設備之間移動視頻文件,然后將文件狀態報告給用於驅動UI的數據庫

有時用戶按下UI上的按鈕以“接受”文件到視頻存儲服務器中。 這涉及將文件從一台服務器復制到另一台服務器。

他們詢問是否可以取消此活動。

我查看了wf4文檔,我看不到回滾部分工作流的方法。

這是可能的,我應該使用什么技術。

這是恢復工作的兩個基本的內部活動。

  1. 用於ACID事務的TransactionScope
  2. 長期工作的可補償活動。

使用Compensable活動,您可以向補償處理程序添加活動以撤消先前完成的工作。 Compensate活動可用於觸發補償。 如果沒有補償,您將在工作流程結束時或在使用Conform活動時獲得確認處理程序。

有關詳細信息,請參閱Matt Milner的.NET 4中Windows Workflow Foundation(WF)簡介

不確定我是否完全理解你的場景,但我認為你需要在異步線程上運行你的傳輸過程,不時檢查一個“取消”變量來執行回滾。 可以在UI的主線程上修改此變量。

當然,這將允許您在轉移之間取消,而不是在單次轉移中取消。

好的,所以我們首先要說,“回滾”已經上傳的內容的處理必須手工完成,所以無論你在哪里儲存這些塊,你都需要在取消時手工清理。

現在,關於工作流本身,在我看來,你可以像這樣設置你的FlowChart

的FlowChart

流程循環第1部分

流程循環第2部分

好吧,讓我們分解這個工作流程。 整個服務應該與某個客戶端密鑰相關聯,這樣您就可以通過每個客戶端Start一次來啟動服務,從而降低啟動成本。

接下來,當所述客戶端想要開始傳輸時,您將調用BeginTransfer ,它將進入傳輸循環。 設置傳輸循環,以便在必要時通過調用CancelTransfer取消塊之間的取消。

在這個模型中,同樣的分支也用於完成傳輸,因為它離開循環,所以當你完成傳輸塊時只需調用CancelTransfer (如果你不喜歡它只是設置一個看起來完全不同的分支)相同)。

最后,當您進入流程循環時,您可以SoftExit整個工作流程並將其關閉,以便在有必要的維護時可以輕松地殺死它, 或者當客戶端完成其連接時,它需要調用SoftExit來處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM