本文是基于ASP.NET MVC的beta版本。
1.我们首先建立一个ASP.NET MVC的应用程序。在web.config中将下面的配置添加到相关位置,代码如下:
<?xml version="1.0"?> <configuration> <configSections> <section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.
WorkflowRuntimeSection,System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/> </configSections> <WorkflowRuntime Name="WorkflowServiceContainer"> <Services> <add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService,
System.Workflow.Runtime,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/> <add type="System.Workflow.Runtime.Hosting.DefaultWorkflowCommitWorkBatchService,
System.Workflow.Runtime,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/> <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService,
System.Workflow.Runtime,Version=3.0.00000.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"
UnloadOnIdle="true" LoadIntervalSeconds="5" ConnectionString="Initial Catalog=
WorkflowPersistence;Data Source=localhost\SQLEXPRESS;Integrated Security=SSPI;"/> </Services> </WorkflowRuntime> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="Accessibility,Version=2.0.0.0,Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/> <add assembly="System.Workflow.Runtime, Version=3.0.0.0,Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Workflow.ComponentModel, Version=3.0.0.0,Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Workflow.Activities, Version=3.0.0.0,Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> <authentication mode="Windows"/> </system.web> </configuration>
持久化服务在这个例子中你可以不必使用,但是真正的项目中是比不可少的。
2.然后在Global.asax.cs中的Application_Start()和Application_End分别启用和停止工作流引擎(WorkflowRuntime),
代码如下:
protected void Application_Start() { RegisterRoutes(RouteTable.Routes); WorkflowRuntime workflowRuntime =new WorkflowRuntime("WorkflowRuntime"); workflowRuntime.StartRuntime(); Application["WorkflowRuntime"] = workflowRuntime; } void Application_End(object sender, EventArgs e) { WorkflowRuntime workflowRuntime =Application["WorkflowRuntime"] as WorkflowRuntime; workflowRuntime.StopRuntime(); }
3.我们来设计我们的视图,我们来完成一个加法运算,Index视图的相关代码如下:
<p> <%Html.BeginForm("Compute","Home");%> <label>请输入第一个数字:</label><%=Html.TextBox("Number1") %><br /> <label>请输入第二个数字:</label><%=Html.TextBox("Number2") %><br /> <input type="submit" value="计算"></input><br/> <label>结果为:</label> <%=Html.Encode(ViewData["Result"]) %> <%Html.EndForm(); %> </p>
我们会在HomeControler的Compute Action中来调用WF来完成加法运算。
4.我们在看下HomeControler中的Compute Action,代码如下:
int Result = 0;
public ActionResult Compute() { ControllerContext cxt = this.ControllerContext; WorkflowRuntime workflowRuntime = cxt.HttpContext.Application["WorkflowRuntime"]
as WorkflowRuntime; ManualWorkflowSchedulerService scheduler =workflowRuntime.GetService( typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService; workflowRuntime.WorkflowCompleted+= new EventHandler<WorkflowCompletedEventArgs>( workflowRuntime_WorkflowCompleted); int Number1 = Int32.Parse(Request.Form["Number1"]); int Number2 = Int32.Parse(Request.Form["Number2"]); Dictionary<String, Object> wfPara= new Dictionary<string, object>(); wfPara.Add("Number1", Number1); wfPara.Add("Number2", Number2); WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(CaryWFLib.AddWorkflow),
wfPara); instance.Start(); scheduler.RunWorkflow(instance.InstanceId); ViewData["Result"]=Result; return View("Index"); } void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e) { if (e.OutputParameters.ContainsKey("Result")) { Result = (int)e.OutputParameters["Result"]; } }
注:
4.1.在ASP.NET MVC中通过如下代码来得到Global.asax.cs中的Application对象:
ControllerContext cxt = this.ControllerContext; WorkflowRuntime workflowRuntime = cxt.HttpContext.Application["WorkflowRuntime"] as WorkflowRuntime;
4.2.我们调用我们的工作流时,要装载ManualWorkflowSchedulerService服务,这点非常重要.这样可以让工作流同步的执行在
ASP.NET MVC的线程上。如果不装载该服务工作流实例会异步的执行在由Workflow runtime管理的线程上。
4.3.我们通过调用工作流来完成加法运算,并将得到的结果ViewData["Result"]返回给视图Index。
5.然后我们来看看我们的WF程序,我们只在工作流设计器中拖入一个CodeActivity,用它来完成我们加法运算的逻辑,工作流的代码如下:
public sealed partial class AddWorkflow: SequentialWorkflowActivity { public int Number1 { get; set; } public int Number2 { get; set; } public int Result { get; set; } public AddWorkflow() { InitializeComponent(); } private void codeActivity1_ExecuteCode(object sender, EventArgs e) { Result = Number1 + Number2; } }
6.整个项目完成后,项目结构如下图:
7.运行home/index后,我们输入两个数字,点击计算按钮会执行HomeControler的Compute Action,可以得到计算的结果,
如下图:
发表评论
-
平淡的2007
2007-12-24 08:04 785早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1382今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 849[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 600[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 737[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1103[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 882当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 807Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 810在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 661我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1138MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 667本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 775本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 719WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1025由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 764[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 660[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 693[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1070一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 909首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
ASP.NET MVC2.0 + WF4.0实现用户多步注册功能
ASP.net_MVC、AJAX智能表单的通用业务流程管理系统
基于ASP.NET的工作流批核系统(.NET 3.5框架的WF技术实现)
聚集了.net的所有技术资料,全面,而且有Demo ,有基本的文件操作、Xpath操作、控件、通讯方式、缓存、数据库开放、JavaScript、CSS、Office编程、图像图形、架构设计、日志管理、异常管理、微软的企业库 还有 WPf ...
聚集了.net的所有技术资料,全面,而且有Demo ,有基本的文件操作、Xpath操作、控件、通讯方式、缓存、数据库开放、JavaScript、CSS、Office编程、图像图形、架构设计、日志管理、异常管理、微软的企业库 还有 WPf ...
《C#高级编程(第7版)》的顶级专家作者团队首先复习了C#的基础知识,之后详细讲解了该语言和架构中的所有新增功能,使读者... ◆ 回顾ASP.NET编程,介绍ASP.NET MVC和ASP.NET 动态数据等新功能 ◆ 讨论使用WCF、MSM
第一层:数据持久层:这个例子中我用EF实现的。 第二层:业务逻辑层:很明显,这一层我要使用WF实现。...第四层:界面层:这里我使用Asp.net MVC。后续文章中,我将会陆续使用MVC、WebForm、WPF、SL四种界面进行展示。
它使用C#语言Asp.net Mvc自托管! 我们知道katana项目,是的,它是asp.net的唯一体现。 我们可以使用它在本地构建http服务器。 .NET Framework太大了? .net framwwork确实非常大,因为它支持许多功能。 web / ...
How to build web applications using ASP.NET AJAX, Silverlight, and ASP.NET MVC Ideas for building Office and Mobile applications, WPF, WCF, and WF projects Ways to effectively analyze and identify ...