[英]How can I use workflows with older versions of activity libraries in (rehosted) workflow designer?
我在ASP.NET應用程序中使用了重新托管的工作流設計器來生成工作流的圖像,基本上采用了類似於Atlas Workflow Monitor之類的WorkflowMonitor示例。 現在,當庫的已安裝版本不再與舊工作流程定義中的原始版本匹配時(尤其是從包含以下內容的工作流程的XOML的數據庫中跟蹤的工作流程和歷史記錄條目開始),我開始擔心重新部署此解決方案后的行為:過去執行)。 值得注意的一件事是,我已經閱讀了有關同時使用多個版本的工作流的文章 ,而這並不是我真正需要的,因為我真的不想運行帶有舊定義的工作流,我只想顯示它們的圖。 我只看到兩種解決方案:
為了避免浪費空間(解決方案1),我決定首先嘗試解決方案2。我發現了一些將TypeProvider服務用於WorkflowMarkupSerializer或WorkflowDesignSurface的示例,並嘗試使用它們。 不幸的是,在一個活動在較新的庫中被刪除並且舊的庫已使用此TypeProvider加載的情況下,它似乎不起作用,如果直接使用WorkflowMarkupSerializer來讀取XOML,它只是從圖中排除了缺少的活動,當使用SqlTrackingService加載一些舊的跟蹤實例時,它會拋出一個異常,即缺少活動類型(盡管在內部它似乎使用了WorkflowMarkupSerializer的相同方法)。
您是否對此有一些經驗,或者提示如何使用TypeProvider可能會出錯? 謝謝 ;)
事實證明,TypeProviders不是解決工作流呈現中缺少的程序集引用(以及訪問舊活動等的跟蹤信息)的可靠方法。 問題不僅在於它們不適用於SqlTrackingService,而且還在於要能夠將程序集傳遞給TypeProvider,必須將其加載到AppDomain中。 AppDomain中具有相同程序集的多個版本會導致瘋狂的事情發生,因此絕對有必要避免這種情況。
盡管無法從AppDomain中卸載程序集,但可以創建一個隔離的AppDomain,以便在必要時加載較早版本的程序集(我已經完成了向AppDomain的AssemblyResolve事件的注冊),並且然后在工作完成后直接卸載整個AppDomain。 有關如何完成此操作的示例,請參閱相關問題 。
現在,我很高興地展示了來自不同版本的活動庫的圖表,沒有任何問題;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.