2013-04-30 67 views
0

我呼籲任務以下狀態機:Windows工作流基礎4.5接收活動排隊行爲

開始 - > A - >乙 - >完成

B和完整之間的過渡是一個單向接收稱爲CompleteTask的活動。看來,當工作流實例處於狀態A時,任何對CompleteTask的調用都將排隊。當狀態轉換爲B時,該調用將立即執行。如果CompleteTask是雙向調用,它將具有相同的行爲,但客戶端將掛起並等待響應。由於工作流程處於錯誤狀態,它通常會導致超時。

這對我來說有點意外。我希望當用戶進行「超出狀態」調用時,工作流引擎只會引發一個異常。

就相關性而言,我使用了一個名爲taskInstanceID的全局CorrelationHandle。我有一種感覺,本地相關句柄可能是解決這個問題的關鍵。

對此有何看法?在工作流程基礎中,任何使「脫離狀態」調用都是非法的方式?

謝謝!

回答

0

看來我誤解了在WPF中接收msg隊列的行爲。

創造了一系列的測試項目後,這裏是我觀察到:

從客戶端接收味精當工作流是在交易將只進行排隊。一旦它接收到一個接收活動,它將拋出隊列中的任何無效消息,並僅處理與接收活動相匹配的消息。

例如:測試工作流

開始 - >延遲A(5秒) - >接收A - >延遲B - > ReceiveReply乙 - >完整

工作流程開始後,立即將客戶端同時發送A和B.請注意,A是單向的,B是雙向請求。工作流引擎將在延遲A階段期間對兩個請求排隊。一旦它達到接收A,它將立即拋出請求B.由於B是雙向請求,客戶端將經歷5秒的阻塞,然後將被異常擊中。

似乎相關句柄的範圍與此行爲無關。

希望這會幫助他人。

0

我通過在狀態級別使用本地化的關聯句柄來解決問題。通過這樣做,超出狀態的調用將得到未發現的關聯異常。