2011-05-27 78 views
1

我正在創建長時間運行的工作流程,並將爲持久性創建一個書籤。 當我執行工作流程時,工作流程就像一個魅力。 當我將整個工作流包含在事務範圍中時,問題就在這裏,一旦遇到.waitone(),我就沒有看到執行結果。在交易中添加書籤WF4.0

當然,我們需要將事務呈現在工作流程之外。我檢查了DB上的DTC設置。我認爲問題是WF 4.0中的書籤和最重要的事務。

回答

0

微軟確認WF 4.0 支持長時間運行的工作流程裏面TransactionScope的。 (我沒有這個記錄,但我們與微軟團隊打過電話,他們證實它不支持)。如果你這樣做會發生什麼情況:工作流程暫停或掛起

它的奇怪之處在於,整個WF 4.0對於事務處理器(調用外部工作流項目)有問題。儘管我說PersistableIdle.unload(它應該持續到數據庫並且應該從內存中卸載),它看起來像一個簡單的工作。我不明白爲什麼它有事務處理問題。

1

工作流程需要多少時間才能執行。一個TransactionScope的默認超時時間爲1分鐘,如果需要更長的時間執行它將中止。持續1分鐘的ACID事務通常要持續很長時間,但不應該持續一秒或兩秒以上,因爲大多數事務都會鎖定數據庫等資源。

另一件事是你不能堅持在交易中的工作流程。交易是一個原子單位,堅持在中間意味着你可以在中間重新啓動,這將很大程度上破壞交易的原子性質。

+0

我有一個工作流程中的書籤,它會將其保存到數據庫中。它使數據庫中的條目執行,只有當我明確調用不屬於事務部分的工作流的oncomplete事件時,Workflow纔會完成。 – Praneeth 2011-05-27 15:54:02

+1

不太清楚,如果我理解,但它肯定聽起來像是在事務中間暫停工作流程,導致超時和失敗。 – Maurice 2011-05-27 16:19:19

+0

如果它正在創建一個暫停,即使沒有事務,它也不應該工作。它僅在我在交易中創建書籤時才懸掛。 – Praneeth 2011-05-27 21:08:31

0

爲什麼在交易中需要書籤?

+0

事務是針對某些數據庫操作而非工作流相關的,但工作流只應在工作流中調用。我的數據出入工作流對於同一事務內的其他數據庫操作很重要 – Praneeth 2011-05-31 05:46:23

+1

我不確定我是否理解你說的內容,但是無論何時啓動TransactionScope或TransactedReceiveScope,工作流中都將存在隱式Persist操作,在交易完成之前和交易完成之前執行。 – Tasio 2011-05-31 10:16:12

+0

你可以發佈你的WF的樣子嗎?也許我們可以更好地理解場景 – Tasio 2011-05-31 10:27:24