2010-03-05 116 views
0

我們有一些對象有關聯的工作流實例。對象用GUID標識,GUID也是與對象關聯的工作流實例的GUID。我們需要重新啓動(見注3「重啓」的意思)的工作流實例,如果工作流定義改變(沒有在工作流本身沒有狀態,並寫入支持重新啓動以這種方式)。重新創建一個工作流實例使用相同的實例ID

重新啓動是通過調用TerminateWorkflowInstance執行,然後使用相同的GUID重新創建實例。怪異的是,這部作品所有其他嘗試(奇怪的嘗試 - 工作流已停止,但由於某種原因無法重新啓動,甚至企圖 - 已經終止工作流程重新啓動成功)。

儘管我承認使用「二手」的GUID是非凡的便宜(和東西我們打算改變),我想知道這是爲什麼不工作的標誌。有任何想法嗎?

NOTES:

  1. 終止的工作流實例被鈍化在終止時(等待通知)。

  2. Terminate調用成功地刪除數據庫中該實例的數據持久化。

  3. 我們使用'重新啓動',意思是在WF的上下文中不太常見 - 不重新啓動鈍化實例,而是強制工作流從其定義的開始重新開始。

謝謝!

回答

0

看起來,調用Terminate()非常殘忍地完成工作流程,甚至沒有調用Uninitialize()上的根活動(在我們的例子中需要進行一些清理)。

我們的解決方法是在工作流程中引發異常(處理'物品可用'事件時,因此'終止'可以通過將特定隊列中的物品排入隊列來觸發),因此工作流程會死亡並調用Uninitialize()