2011-08-21 52 views
0

我工作的一個ASP .NET應用程序,我使用的是Windows工作流基礎4.當我結束我想原因有以下代碼工作流程中止

 app.Aborted = delegate(WorkflowApplicationAbortedEventArgs o) 
     { 

      HttpContext.Current.Response.Write("Exception:" + o.Reason.GetType().FullName + o.Reason.Message); 
      syncEvent.Set(); 
     }; 

導出工作流程,但是我認爲它不不起作用,因爲工作流沒有HttpContext。任何想法我怎麼能出口它?

回答

0

我認爲最簡單的方法就是敷WorkflowApplication和HttpContext的在同一個班,例如:


class WorkflowAppAdapter 
    { 
     private HttpContext m_Context; 
     private WorkflowApplication m_WorkflowApp; 

     public WorkflowAppAdapter(WorkflowApplication app, HttpContext context) 
     { 
      m_Context = context; 
      m_WorkflowApp = app; 

      app.Completed = 
       (e) => 
       { 
        Debug.WriteLine(m_Context.Request.Browser.Browser); 

       }; 
     } 

     public void Run() 
     { 
      m_WorkflowApp.Run(); 
     } 
    } 
0

的問題是,HttpContext.Current是一個線程靜態字段限制在當前線程執行ASP.NET請求,而WorkflowApplication在後臺ThreadPool線程上運行工作流和回調。

您想將錯誤寫回響應流的事實表明您正在這裏使用短時間運行的工作流。在這種情況下,使用WorkflowInvoker來運行工作流程要容易得多,因爲不涉及後臺線程。

如果您推薦使用WorkflowApplication,而不是建議查看SynchronizationContext屬性並設置大多數回調將被重新安排回原始線程。

+0

嗯,我不明白你究竟是什麼意思 – pikk

+0

我需要更清楚地解釋什麼部分? – Maurice

+0

最後一個,因爲我只能使用WorkflowApplication – pikk