2012-03-28 66 views
1

我有一個包含Pick活動的工作流。每個PickBranch由WCF請求觸發。觸發分支然後發送對請求的響應並執行一個Action活動。但是,我所看到的行爲表明,在完成操作活動後纔會發送響應,這會導致原始請求超時,具體取決於Action活動需要完成多長時間。工作流選擇活動不發送回覆,直到動作完成

enter image description here

在上面的PickBranch,我添加工作訂單移動數據庫。每個工作訂單最多需要16秒才能添加到數據庫中。隨着工單數量的增加,原始請求超時的可能性就越大。我究竟做錯了什麼?

回答

2

好的,我想我有一個解決方案。根據Maurice's answer here,我在SendReplyToReceive之後添加了一個Delay活動,然後工作流開始按照預期行事。

enter image description here

+0

嗨。即使這個問題在幾年前得到了迴應,你是否找到了最終解決方案?我有同樣的問題,延遲有助於解決它。我只是想知道是否有更好的方法,而不是使用解決方法? – 2017-03-15 11:04:36

+1

嗨裏卡多 - 5年在IT方面很長一段時間。不幸的是,我無法再訪問該項目的源代碼,所以我不能說我是否找到了更好的替代方案,對不起。 – 2017-03-15 20:07:06

+0

完全沒問題。謝謝您的回覆 :) – 2017-03-16 10:59:23

-1

這是按預期工作的。如果這些操作需要很長時間,那麼通過異步調用它們可以更好地服務嗎?點擊這裏,查看AsyncCodeActivity:

http://msdn.microsoft.com/en-us/library/system.activities.asynccodeactivity.aspx

+0

真的嗎?這似乎與工作流程顯示的順序相反,即接收請求,發送響應,然後處理操作。如果客戶已收到響應,它應該能夠繼續而無需等待完整的工作流程。 – 2012-03-28 22:32:51

+0

WCF工作流程中的消息傳遞旨在按照MSDN和其他地方的描述異步使用。當您在其他同步工作流程中擁有異步代碼時,應使用異步代碼活動。 – 2013-03-27 20:40:43

0

只是測試這一點,它工作正常。如果我在觸發器內有一個發送和接收的Pick,並且在動作中有延遲,則立即收到答覆。

您確定SendReply活動的請求似乎設置正確嗎?

Patrick仍然是對的,您應該將您的數據庫活動作爲AsyncCodeActivity實現,但這不會成爲您的回覆被延遲的原因。

+0

謝謝彼得。這個特定的工作流程只是不經常執行,而AsyncCodeActivity在應用程序的上下文中沒有意義。不,它不能正常工作。 – 2012-03-29 01:00:16

+0

正是由於您想要執行AsyncCodeActivity實現的工作流的單線程本質。這將釋放調度程序線程以將任何其他活動安排到隊列中。我已經使用了相同的發送/接收活動,在高度併發的工作流程應用程序中選擇模式一段時間,我還沒有看到這種行爲。如果延遲可以解決您的問題,那麼我懷疑將IO綁定操作正確定義爲異步代碼活動會具有相同的效果,原因可能是調度程序線程上的阻塞調用。 – 2012-03-29 01:19:43

0

我我的閱歷檢查PersistBeforeSend SendReplyToReceive爲True修復了這個問題。在SendReplyToReceive之後放置Persist塊也有幫助。