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

开发 后端
使用 ASP.NET 中的 Global.asax 文件可以处理与开始和结束 Web 应用程序时引发的各个 Web 会话或事件相关的 Web 窗体事件。本文介绍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工作流的创建与启动。

【编辑推荐】

  1. ASP.NET数据库连接类ClassConn以及oledb数据库连接方法
  2. ASP.NET数据库驱动类的实现:DBHelper
  3. 用C#写的ASP.NET数据库操作类
  4. ASP.NET数据库图片存储到Sql2000中
  5. ASP.NET自定义错误处理页面的添加
责任编辑:yangsai 来源: MSDN
相关推荐

2009-07-31 17:50:27

ASP.NET工作流

2009-07-31 17:42:33

ASP.NET工作流

2009-07-31 18:00:35

ASP.NET工作流学

2009-07-27 10:22:43

ASP.NET Dro

2009-07-29 17:29:46

ASP与ASP.NET

2009-07-29 13:57:53

创建SlideShowASP.NET

2009-07-23 14:21:55

ASP.NET页面

2009-11-09 08:53:21

ASP.NET缓存

2009-07-24 15:47:35

ASP.NET与ASP

2024-07-31 08:01:48

2009-07-23 15:18:30

创建XML Web服务ASP.NET

2009-08-04 13:38:36

ASP.NET用户控件

2009-12-02 09:07:45

ASP.NET 4.0

2009-03-03 09:13:36

工作流BPM业务流程

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-08-03 12:40:46

ASP.NET编程模型

2009-09-18 09:23:21

ASP.NET 4自动启动

2009-07-28 14:10:14

点赞
收藏

51CTO技术栈公众号