ASP.NET工作流的创建与启动


  本文标签:ASP.NET工作流

  创建 Windows Workflow Foundation 是为了在不同的宿主应用程序环境中运行  。 ASP.NET Web 窗体就是一种这样的支持环境  。 但是,当为 Windows Workflow Foundation 创建基于 Web 的宿主应用程序时,必须设计宿主基础结构以解决 ASP.NET 应用程序和传统 Windows 窗体应用程序之间的关键体系结构差异  。 例如,ASP.NET 应用程序可以同时为多个同步的用户提供服务  。 在这种服务器环境中,应用程序的设计方式必须有效地利用可用的系统内存  。 这些情况下,Windows Workflow Foundation 提供卸载工作流实例的 SqlWorkflowPersistenceService 服务  。 另外,ASP.NET 在收到请求时会发出响应  。 默认情况下,工作流运行时以异步方式执行工作流  。 因此,可能会在工作流完成之前呈现页面和发送响应  。 为了避免这种情况,Windows Workflow Foundation 提供 ManualWorkflowSchedulerService 服务以便同步运行工作流  。 这使您的 Web 窗体能够将工作流状态信息返回给用户  。

  ASP.NET工作流的创建:创建 WorkflowRuntime 对象

  使用 ASP.NET 中的 Global.asax 文件可以处理与开始和结束 Web 应用程序时引发的各个 Web 会话或事件相关的 Web 窗体事件  。 ASP.NET 中的 Session 对象是为每个请求 Web 页的用户创建的,Application 对象是在每个会话中共享的单个对象  。 下面的示例演示如何处理 Application_Start 事件以创建 WorkflowRuntime 实例和添加 ManualWorkflowSchedulerService  。 完成此操作后,通过使用 StartRuntime 方法启动运行时,您可以将 WorkflowRuntime 实例保存到随 ASP.NET 一起提供的 Application 对象中  。 在以后对应用程序中 Web 页的请求中,您可以检索此单个 WorkflowRuntime 实例以启动工作流  。

  1. void Application_Start(object sender, EventArgs e)   
  2. {  
  3.     System.Workflow.Runtime.WorkflowRuntime workflowRuntime =  
  4.         new System.Workflow.Runtime.WorkflowRuntime();  
  5.  
  6.     System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService =  
  7.         new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService();  
  8.     workflowRuntime.AddService(manualService);  
  9.       
  10.     workflowRuntime.StartRuntime();  
  11.  
  12.     Application["WorkflowRuntime"] = workflowRuntime;             
  13. }  
  14.  

  当应用程序完成时,ASP.NET 引发 Application_End 事件  。 下面的代码演示如何检索在 Application_Start 事件期间创建的 WorkflowRuntime 对象,以便调用 StopRuntime 方法  。

  1. void Application_End(object sender, EventArgs e)   
  2. {  
  3.     System.Workflow.Runtime.WorkflowRuntime workflowRuntime =  
  4.         Application["WorkflowRuntime"as System.Workflow.Runtime.WorkflowRuntime;  
  5.     workflowRuntime.StopRuntime();  
  6. }  

  ASP.NET工作流的启动:在 ASP.NET Web 窗体中启动工作流

  在上一节中,在 Application_Start 事件期间创建了 WorkflowRuntime 实例  。 在 Web 应用程序处理请求时,会一直保留此对象  。 下面的代码演示如何从 ASP.NET 中的 Application 对象中检索 WorkflowRuntime 实例  。 之后,使用 GetService 方法检索用于启动工作流的 ManualWorkflowSchedulerService,以便同步运行工作流  。 为此,调用在 WorkflowRuntime 类中定义的 CreateWorkflow 方法,随后调用从 CreateWorkflow 调用中返回的 WorkflowInstance 对象中的 Start 方法  。 由于将 ManualWorkflowSchedulerService 添加到了 WorkflowRuntime,因此调用 RunWorkflow 方法,传递 WorkflowInstance 对象的 InstanceId  。

  1. protected void StartRuntime_Click(object sender, EventArgs e)  
  2. {  
  3.     WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"as WorkflowRuntime;  
  4.     ManualWorkflowSchedulerService manualScheduler =   
  5.         workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService))   
  6.         as ManualWorkflowSchedulerService;  
  7.  
  8.     WorkflowInstance instance = workflowRuntime.CreateWorkflow(  
  9.         typeof(ASPNetSequentialWorkflow));  
  10.     instance.Start();  
  11.     manualScheduler.RunWorkflow(instance.InstanceId);  
  12. }  

  以上就介绍了ASP.NET工作流的创建与启动  。