我正在創建長時間運行的工作流程,並將爲持久性創建一個書籤。 當我執行工作流程時,工作流程就像一個魅力。 當我將整個工作流包含在事務範圍中時,問題就在這裏,一旦遇到.waitone()
,我就沒有看到執行結果。在交易中添加書籤WF4.0
當然,我們需要將事務呈現在工作流程之外。我檢查了DB上的DTC設置。我認爲問題是WF 4.0中的書籤和最重要的事務。
我正在創建長時間運行的工作流程,並將爲持久性創建一個書籤。 當我執行工作流程時,工作流程就像一個魅力。 當我將整個工作流包含在事務範圍中時,問題就在這裏,一旦遇到.waitone()
,我就沒有看到執行結果。在交易中添加書籤WF4.0
當然,我們需要將事務呈現在工作流程之外。我檢查了DB上的DTC設置。我認爲問題是WF 4.0中的書籤和最重要的事務。
微軟確認WF 4.0 不支持長時間運行的工作流程裏面TransactionScope的。 (我沒有這個記錄,但我們與微軟團隊打過電話,他們證實它不支持)。如果你這樣做會發生什麼情況:工作流程暫停或掛起
它的奇怪之處在於,整個WF 4.0對於事務處理器(調用外部工作流項目)有問題。儘管我說PersistableIdle.unload(它應該持續到數據庫並且應該從內存中卸載),它看起來像一個簡單的工作。我不明白爲什麼它有事務處理問題。
工作流程需要多少時間才能執行。一個TransactionScope的默認超時時間爲1分鐘,如果需要更長的時間執行它將中止。持續1分鐘的ACID事務通常要持續很長時間,但不應該持續一秒或兩秒以上,因爲大多數事務都會鎖定數據庫等資源。
另一件事是你不能堅持在交易中的工作流程。交易是一個原子單位,堅持在中間意味着你可以在中間重新啓動,這將很大程度上破壞交易的原子性質。
爲什麼在交易中需要書籤?
我有一個工作流程中的書籤,它會將其保存到數據庫中。它使數據庫中的條目執行,只有當我明確調用不屬於事務部分的工作流的oncomplete事件時,Workflow纔會完成。 – Praneeth 2011-05-27 15:54:02
不太清楚,如果我理解,但它肯定聽起來像是在事務中間暫停工作流程,導致超時和失敗。 – Maurice 2011-05-27 16:19:19
如果它正在創建一個暫停,即使沒有事務,它也不應該工作。它僅在我在交易中創建書籤時才懸掛。 – Praneeth 2011-05-27 21:08:31