ASP.NET中实现WWF工作流(ManualWorkflowSchedulerService)
2010-08-19 16:45
399 查看
将工作流用于 ASP.NET 创建 Windows Workflow Foundation 是为了在不同的宿主应用程序环境中运行。 ASP.NET Web 窗体就是一种这样的支持环境。 但是,当为 Windows Workflow Foundation 创建基于 Web 的宿主应用程序时,必须设计宿主基础结构以解决 ASP.NET 应用程序和传统 Windows 窗体应用程序之间的关键体系结构差异。 例如,ASP.NET 应用程序可以同时为多个同步的用户提供服务。 在这种服务器环境中,应用程序的设计方式必须有效地利用可用的系统内存。 这些情况下,Windows Workflow Foundation 提供卸载工作流实例的 SqlWorkflowPersistenceService [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.hosting.sqlworkflowpersistenceservice.aspx ] 服务。 另外,ASP.NET 在收到请求时会发出响应。 默认情况下,工作流运行时以异步方式执行工作流。 因此,可能会在工作流完成之前呈现页面和发送响应。 为了避免这种情况,Windows Workflow Foundation 提供 ManualWorkflowSchedulerService [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.hosting.manualworkflowschedulerservice.aspx ] 服务以便同步运行工作流。 这使您的 Web 窗体能够将工作流状态信息返回给用户。 创建 WorkflowRuntime 对象使用 ASP.NET 中的 Global.asax 文件可以处理与开始和结束 Web 应用程序时引发的各个 Web 会话或事件相关的 Web 窗体事件。 ASP.NET 中的 Session 对象是为每个请求 Web 页的用户创建的,Application 对象是在每个会话中共享的单个对象。 下面的示例演示如何处理 Application_Start 事件以创建 WorkflowRuntime [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowruntime.aspx ] 实例和添加 ManualWorkflowSchedulerService。 完成此操作后,通过使用 StartRuntime [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowruntime.startruntime.aspx ] 方法启动运行时,您可以将 WorkflowRuntime 实例保存到随 ASP.NET 一起提供的 Application 对象中。 在以后对应用程序中 Web 页的请求中,您可以检索此单个 WorkflowRuntime 实例以启动工作流。C# 复制代码 void Application_Start(object sender, EventArgs e) { System.Workflow.Runtime.WorkflowRuntime workflowRuntime = new System.Workflow.Runtime.WorkflowRuntime(); System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService = new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService(); workflowRuntime.AddService(manualService); workflowRuntime.StartRuntime(); Application["WorkflowRuntime"] = workflowRuntime; } 当应用程序完成时,ASP.NET 引发 Application_End 事件。 下面的代码演示如何检索在 Application_Start 事件期间创建的 WorkflowRuntime 对象,以便调用 StopRuntime [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowruntime.stopruntime.aspx ] 方法。 C# 复制代码 void Application_End(object sender, EventArgs e) { System.Workflow.Runtime.WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime; workflowRuntime.StopRuntime(); } 在 ASP.NET Web 窗体中启动工作流在上一节中,在 Application_Start 事件期间创建了 WorkflowRuntime 实例。 在 Web 应用程序处理请求时,会一直保留此对象。 下面的代码演示如何从 ASP.NET 中的 Application 对象中检索 WorkflowRuntime 实例。 之后,使用 GetService [ http://msdn.microsoft.com/zh-cn/vbasic/ms594876.aspx ] 方法检索用于启动工作流的 ManualWorkflowSchedulerService,以便同步运行工作流。 为此,调用在 WorkflowRuntime 类中定义的 CreateWorkflow [ http://msdn.microsoft.com/zh-cn/vbasic/ms594868.aspx ] 方法,随后调用从 CreateWorkflow 调用中返回的 WorkflowInstance [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowinstance.aspx ] 对象中的 Start [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowinstance.start.aspx ] 方法。 由于将 ManualWorkflowSchedulerService 添加到了 WorkflowRuntime,因此调用 RunWorkflow [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.hosting.manualworkflowschedulerservice.runworkflow.aspx ] 方法,传递 WorkflowInstance 对象的 InstanceId。C# 复制代码 protected void StartRuntime_Click(object sender, EventArgs e) { WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime; ManualWorkflowSchedulerService manualScheduler = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService; WorkflowInstance instance = workflowRuntime.CreateWorkflow( typeof(ASPNetSequentialWorkflow)); instance.Start(); manualScheduler.RunWorkflow(instance.InstanceId); } 请参见参考WorkflowRuntime [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowruntime.aspx ]ManualWorkflowSchedulerService [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.hosting.manualworkflowschedulerservice.aspx ] GetService [ http://msdn.microsoft.com/zh-cn/vbasic/ms594876.aspx ] RunWorkflow [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.hosting.manualworkflowschedulerservice.runworkflow.aspx ] WorkflowInstance [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowinstance.aspx ] StartRuntime [ http://msdn.microsoft.com/zh-cn/vbasic/system.workflow.runtime.workflowruntime.startruntime.aspx ] 概念如何:添加和移除工作流服务 [ http://msdn.microsoft.com/zh-cn/vbasic/ms735889.aspx ]其他资源开发 ASP.NET 工作流应用程序 [ http://msdn.microsoft.com/zh-cn/vbasic/ms734584.aspx ] |
相关文章推荐
- Asp.net生成工作流、审批流的解决方案(asp.net workflow svg)
- 有使用WWF和ASP.NET结合做工作流产品的朋友么?
- 使用ASP.NET实现Windows Service定时执行任务
- WF (Windows Workflow Foundation) 工作流学习(一)一个Asp.Net 状态机验证程序
- asp.net :使用jquery 的ajax +WebService+json 实现无刷新去后台值
- Asp.net MVC scheduler的实现方法详解
- Asp.Net Ajax+WCF Service+ADO.NET Entity Framework实现数据列表,数据筛选,分页,排序,删除
- WF (Windows Workflow Foundation) 工作流学习(二)一个Asp.Net 与 顺序工作流 结合的例子
- 用ASP.NET模拟Windows Service来实现定时提醒之类的功能
- Asp.net MVC scheduler实现
- asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
- WinServiceTask 任务调度,也可以用于ASP.NET实现自动服务
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- 使用ASP.NET实现Windows Service定时执行任务
- Asp.net生成工作流、审批流的解决方案(asp.net workflow svg)
- ASP.NET 实现轻量级的工作流[审批流程]
- asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
- asp.net :使用jquery 的ajax +WebService+json 实现无刷新去后台值
- asp.net如何实现数字签名(DSACryptoServiceProvider)