C# 工作流中止 我正在使用ASP.NET应用程序,我正在使用Windows工作流基础4。当我终止工作流时,我想用以下代码导出原因 app.Aborted = delegate(WorkflowApplicationAbortedEventArgs o) { HttpContext.Current.Response.Write("Exception:" + o.Reason.GetType().FullName + o.Reason.Message); syncEvent.Set(); };
但是我认为它不起作用,因为工作流没有HttpContext。我想最简单的方法是将WorkflowApplication和HttpContext封装在同一个类中,例如:C# 工作流中止 我正在使用ASP.NET应用程序,我正在使用Windows工作流基础4。当我终止工作流时,我想用以下代码导出原因 app.Aborted = delegate(WorkflowApplicationAbortedEventArgs o) { HttpContext.Current.Response.Write("Exception:" + o.Reason.GetType().FullName + o.Reason.Message); syncEvent.Set(); };,c#,workflow,workflow-foundation,workflow-foundation-4,C#,Workflow,Workflow Foundation,Workflow Foundation 4,但是我认为它不起作用,因为工作流没有HttpContext。我想最简单的方法是将WorkflowApplication和HttpContext封装在同一个类中,例如: class WorkflowAppAdapter { private HttpContext m_Context; private WorkflowApplication m_WorkflowApp; public WorkflowAppAdapter(WorkflowA
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();
}
}
问题在于HttpContext.Current是一个线程静态字段,作用域为WorkflowApplication在后台线程池线程上运行工作流和回调时执行ASP.NET请求的当前线程 您希望将错误写回响应流的事实表明您正在使用短时间运行的工作流。在这种情况下,使用WorkflowInvoker运行工作流要容易得多,因为不涉及后台线程
如果您对Workflow应用程序的性能比我建议的要好,请查看SynchronizationContext属性并进行设置,这样大多数回调将被军事化回原始线程。Hm,我不明白您最后一个回调的确切含义,因为我只需使用Workflow应用程序检查博客文章作为示例。