簡體   English   中英

在WF4中更改了workflowdefinition后加載持久工作流

[英]Loading persisted workflow after workflowdefinition has changed in WF4

如何解決這個問題(在WF4中):

我在xaml中創建了一個工作流程並啟動了它的幾個實例,我有一個persistancestore,並且所有工作流程都保留在他們的工作流程中間的書簽上。

現在我停止申請

如果我重新啟動應用程序,一切都會恢復,很好地完成。

但是,如果我想在運行的實例持續存在后更改工作流定義,該怎么辦? 加載正在運行的工作流程(我能夠找到)的唯一方法是以下方式:

        WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
        wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);

        wfapp.Load(wfGuid);

因此,您需要工作流程定義,如果在持久性過程中發生了變化,那么事情就會出現嚴重錯誤。

解決這個問題的最佳方法是什么?

這種情況有點問題。 無法將較舊的工作流定義遷移到新格式。 我做了一些有限的測試和一些添加/刪除活動的場景,其中尚未執行的工作正常。 但后來我也遇到了嚴重錯誤的情況,包括重新執行已經完成的活動。

據我所知,除了跟蹤用於創建工作流的XAML /程序集的版本以及檢查當您要重新啟動工作流以確定要使用的工作流版本時,沒有其他方法可以解決問題。

同一工作流程的許多版本必須共存。 我的意思是,舊的實例必須完成舊的工作流程版本,而新的實例必須以新的工作流程版本開始。 就我而言,我們有工作流服務。 它在配置中,路由器描述實例嘗試執行的順序。 如果實例無法開始使用一個版本,則嘗試下一個版本,依此類推。

此外,如果您的更改不涉及工作流變量,合同公開等的更改...舊的和新的工作流實例版本可以在相同的工作流版本上運行。 你會知道,測試它。

在WF4中更改定義后,可以加載持久化的wf實例 - 您必須解析並更改wf引擎存儲的xml文件。 您應該創建兩個相同的工作流程:使用舊版本和新版本並比較它們以消除差異。 必須對定義xml和用於存儲工作流狀態的復雜數據xml執行此操作。 使用LinqToXML解析它將為您節省大量時間,並且您必須確保已檢查所有差異 - 如果剩下一個差異,則wf將無法加載。 有一個元素“ResumeData”,你可以在wf狀態xml中找到它,它太重了,無法解析,但好消息是你可以簡單地刪除它。

這與Windows Workflow的問題不同,因為它是SQL持久性服務。 您可以創建自己的持久性服務來處理這種情況,可以通過支持將舊工作流轉換為新工作流或更抽象的方式,例如序列化為XML / JSON的持久性服務,這可能更容易支持反序列化版本作為另一個版本。

暫無
暫無

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

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