2009-09-16 33 views
0

我有一個Web應用程序,我將工作流功能添加到使用Windows Workflow Foundation。我的解決方案基於K. Scott Allen在OdeToCode上的Orders Workflow示例。在開始時,我沒有意識到警告的重要性,「如果您使用Delay活動併爲手動調度服務配置活動計時器,這些事件將發生在與HTTP請求無關的後臺線程上」。我現在需要使用延遲活動,而且不像他的解決方案架構那樣工作。有沒有人遇到過這個問題,並找到了一個很好的解決方案?這個例子與許多地方有關,但我還沒有看到任何人遇到過這個問題,這對我來說似乎有點阻礙。如何在基於ASP.Net網絡的工作流程中使用WF DelayActivity

編輯:問題是來自工作流程的結果通過HttpContext返回到Web應用程序。我正在使用帶有useActiveTimers的ManualWorkflowSchedulerService,並且這適用於大多數情況,因爲工作流事件是從Web應用程序觸發的,並且當返回工作流結果並且Web應用程序可以繼續處理時,HttpContext仍然存在。當使用延遲活動時,處理髮生在後臺線程上,並且當它嘗試將結果返回給Web應用程序時,沒有有效的HttpContext(因爲沒有Http請求),所以進一步處理失敗。也就是說,webapp正在嘗試處理工作流程結果,但沒有http請求。

我想我需要在工作流程內完成所有的延遲活動處理,而不是交給網絡應用程序。

乾杯。

+0

你遇到的確切問題是什麼? – 2009-09-16 07:54:45

回答

0

您沒有描述您遇到的問題。但也許這有一些幫助。

您可以將ManualWorkflowSchedulerService與useActiveTimers一起使用,並且工作流將在另一個線程上繼續。通常情況下,這很好,因爲你的HTTP請求已經完成,並不重要。

如果您需要完全控制,則工作流運行時會讓您使用GetLoadedWorkflows()函數獲取所有加載的工作流的句柄。這將返回WorkflowInstance對象的集合。使用這些你可以調用GetWorkflowNextTimerExpiration()來檢查哪些已過期。如果有人可以手動恢復它。在這種情況下,您希望將useWorkflowSchedulerService與useActiveTimers = false一起使用,以便您還可以控制最後一個線程。但是在大多數情況下使用useActiveTimers = true可以很好地工作。

相關問題