本文是基于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 817早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1415今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 892[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 639[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 783[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1148[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 929当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 835Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 844在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 695我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1187MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 705本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 839本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 761WF提供了一组核心服务 ... -
MOSS中的WebPart开发
2008-05-10 13:53 1060由于在asp.net1.1的时候asp.net中还没有webp ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 800[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 692[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 735[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1107一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 950首先来看MSDN中关于这个接口的说明: [ComVisible ...
相关推荐
在ASP.NET MVC中,Ajax(Asynchronous JavaScript and XML)技术被广泛使用以实现页面的部分更新,无需刷新整个页面。这提高了用户体验,因为交互变得更加流畅。Ajax通过JavaScript发送异步HTTP请求到服务器,并在...
本文将详细介绍如何使用ASP.NET MVC2.0与WF4.0(Windows Workflow Foundation 4.0)来实现一个用户多步注册的功能。 #### 技术栈 - **ASP.NET MVC2.0**:基于.NET Framework的MVC架构的Web应用程序框架。 - **WF4.0...
ASP.NET + WF4.0(Windows Workflow Foundation 4.0)数据持久化请假系统Demo是一个综合性的项目,展示了如何在Web应用中结合WF4.0技术处理业务流程,特别是请假申请这一具体场景。这个系统利用了ASP.NET作为前端...
在Asp.NET中,WF可以与Web Forms或MVC框架集成,提供用户交互界面来启动、暂停、继续或终止工作流程。文件"LogOn.aspx"可能是登录页面,用于验证用户身份并控制对工作流应用程序的访问。 工作流实例(WF实例)是...
在ASP.NET中实现Word文档的在线预览是一项常见需求,尤其在需要用户查看但不需要下载原始文件的场景下。在给定的标题和描述中,提到的技术方案是通过Office-Tools、WF(可能是Windows Forms)以及FlexPaper来实现这...
在ASP.NET中,开发人员可以使用C#或VB.NET等语言,通过控件和事件驱动的方式进行编程,大大简化了Web开发过程。 WF(Windows Workflow Foundation)是.NET Framework 3.5中引入的一个工作流服务,它允许开发者创建...
在基于ASP.NET的工作流批核系统中,用户界面通常由ASP.NET Web Forms或MVC提供,它们与WF服务交互,展示工作流的状态并接收用户的输入。用户可以通过Web界面提交请求,启动工作流实例,然后根据预定义的规则进行审批...
在ASP.NET中,开发者可以使用C#或VB.NET等语言编写代码,通过HTTP协议与客户端进行交互,构建动态、交互性强的Web应用。 Windows Workflow Foundation(WF)是.NET Framework 3.5中的一个核心组件,专门用于构建...
在本项目中,我们关注的是一个基于ASP.NET技术、使用.NET Framework 3.5的WF(Windows Workflow Foundation)技术实现的工作流批核系统。让我们深入探讨这个系统的相关知识点。 1. ASP.NET基础:ASP.NET是微软提供...
在ASP.NET 3.5中,开发者可以使用LINQ与数据库、XML文档甚至集合进行交互。 6. **数据访问**:ASP.NET 3.5支持多种数据访问技术,包括ADO.NET、Entity Framework和Linq to SQL。这些工具简化了数据库操作,提高了...
在IT行业中,ASP.NET是一个由微软开发的服务器端Web应用程序框架,用于构建高效、可扩展且功能丰富的Web应用。此“net.rar”压缩包聚焦于ASP.NET的设计与安全方案,特别是工作流相关的知识。让我们深入探讨这些关键...
下面我们将深入探讨ASP.NET、工作流以及WF在构建批核系统中的应用。 **ASP.NET基础** ASP.NET是微软提供的一个开源Web应用程序开发平台,它是.NET Framework的一部分。它支持多种编程模型,如ASP.NET MVC、Web ...
在这个“ASP.NET 3.5动态网站开发案例指导”光盘中,包含了丰富的学习资源,旨在帮助开发者深入理解和实践ASP.NET 3.5的各个关键特性。 一、ASP.NET 3.5基础 ASP.NET 3.5在2.0的基础上进行了扩展,引入了多项新功能...
在基于ASP.NET的工作流批核系统中,WF技术可以与ASP.NET Web Forms或MVC框架相结合,实现用户界面和后台工作流逻辑的分离。开发人员可以使用WF设计工具创建工作流模板,然后在ASP.NET应用中集成这些模板,以驱动批核...