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