如何使用WF4和ASP.NET线程进行操作

如何使用WF4和ASP.NET线程进行操作,asp.net,workflow-foundation-4,Asp.net,Workflow Foundation 4,目前,我有一个ASP.NET Web表单应用程序,它与我的自定义工作流协作。 我面临着ASP.NET的httpcontext和活动上下文(NativeActivityContext)之间的线程计时问题 我的工作流具有实现SqlWorkflowInstanceStore的持久性功能 下面的代码是我的工作流中的一个活动,它执行类似于页面导航的操作,并通过扩展名(PageNavigationExtension)返回所需页面的url 问题发生在我在“directNavigate”函数中恢复书签的过程中,

目前,我有一个ASP.NET Web表单应用程序,它与我的自定义工作流协作。 我面临着ASP.NET的httpcontext和活动上下文(NativeActivityContext)之间的线程计时问题

我的工作流具有实现SqlWorkflowInstanceStore的持久性功能

下面的代码是我的工作流中的一个活动,它执行类似于页面导航的操作,并通过扩展名(PageNavigationExtension)返回所需页面的url

问题发生在我在“directNavigate”函数中恢复书签的过程中,活动上下文没有调用“
ResumeBookmark
”书签回调委托,直到“
return pageNaviExtension.Url;
”的行,acititycontext线程才转到我的“
bool action=(bool)state;
”行“
ResumeBookmark
”书签回调委托


简而言之,这意味着在“
return pageNaviExtension.url”行中,我无法通过我的活动获取返回的页面url“并且在最后,HttpContext for my ASPX页面的线程退出“
directNavigate
”函数,而不退出页面url。

找到了解决方案,即自动resetEvent

在workflowapplication初始化期间,我添加了workflowapplication.Unloaded委托,以向

AutoResetEvent
wfApp.unload=(a)=>{waitHandler.Set();};

在恢复书签时,显式调用
AutoResetEvent.WaitOne();

它阻止HttpContext继续运行,直到卸载或完成工作流并返回结果

workflow.ResumeBookmark(bMarkName, true);
AutoResetEvent.WaitOne();` 

我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。在msdn论坛中发现了一个类似的问题,该论坛使用SynchronizationContext显式停止HttpContext。
 public string directNavigate(string bMarkName) {
    WorkflowApplication workflow = GetWorkflow(null);
    workflow.Load(this.WorkflowID);
    workflow.ResumeBookmark(bMarkName, true);

    return pageNaviExtension.Url;
}
workflow.ResumeBookmark(bMarkName, true);
AutoResetEvent.WaitOne();`