`

在ASP.NET MVC中使用WF

阅读更多

本文是基于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.整个项目完成后,项目结构如下图:
aspnetmvc2 
7.运行home/index后,我们输入两个数字,点击计算按钮会执行HomeControler的Compute Action,可以得到计算的结果,
如下图:
aspnetmvc1 

分享到:
评论

相关推荐

    wf.rar_ASP.NET MVC_ajax_mvc_智能表单_管理系统mvc

    在ASP.NET MVC中,Ajax(Asynchronous JavaScript and XML)技术被广泛使用以实现页面的部分更新,无需刷新整个页面。这提高了用户体验,因为交互变得更加流畅。Ajax通过JavaScript发送异步HTTP请求到服务器,并在...

    MVC2.0 + WF4.0实现用户多步注册功能

    本文将详细介绍如何使用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数据持久化请假系统Demo

    ASP.NET + WF4.0(Windows Workflow Foundation 4.0)数据持久化请假系统Demo是一个综合性的项目,展示了如何在Web应用中结合WF4.0技术处理业务流程,特别是请假申请这一具体场景。这个系统利用了ASP.NET作为前端...

    Asp.net工作流(WF+LINQ).rar

    在Asp.NET中,WF可以与Web Forms或MVC框架集成,提供用户交互界面来启动、暂停、继续或终止工作流程。文件"LogOn.aspx"可能是登录页面,用于验证用户身份并控制对工作流应用程序的访问。 工作流实例(WF实例)是...

    asp .net 实现word文档在线预览

    在ASP.NET中实现Word文档的在线预览是一项常见需求,尤其在需要用户查看但不需要下载原始文件的场景下。在给定的标题和描述中,提到的技术方案是通过Office-Tools、WF(可能是Windows Forms)以及FlexPaper来实现这...

    基于ASP.NET的工作流批核系统(.NET 3.5框架的WF技术实现)

    在ASP.NET中,开发人员可以使用C#或VB.NET等语言,通过控件和事件驱动的方式进行编程,大大简化了Web开发过程。 WF(Windows Workflow Foundation)是.NET Framework 3.5中引入的一个工作流服务,它允许开发者创建...

    基于ASP.NET的工作流批核系统(.NET 3.5框架的WF技术实现)

    在基于ASP.NET的工作流批核系统中,用户界面通常由ASP.NET Web Forms或MVC提供,它们与WF服务交互,展示工作流的状态并接收用户的输入。用户可以通过Web界面提交请求,启动工作流实例,然后根据预定义的规则进行审批...

    基于ASP.NET的工作流批核系统(.NET 3.5框架的WF技术实现).rar

    在ASP.NET中,开发者可以使用C#或VB.NET等语言编写代码,通过HTTP协议与客户端进行交互,构建动态、交互性强的Web应用。 Windows Workflow Foundation(WF)是.NET Framework 3.5中的一个核心组件,专门用于构建...

    基于ASP.NET 工作流批核系统(.NET 3.5框架的WF技术实现)

    在本项目中,我们关注的是一个基于ASP.NET技术、使用.NET Framework 3.5的WF(Windows Workflow Foundation)技术实现的工作流批核系统。让我们深入探讨这个系统的相关知识点。 1. ASP.NET基础:ASP.NET是微软提供...

    至理:精通ASP.NET3.5网络开发源代码

    在ASP.NET 3.5中,开发者可以使用LINQ与数据库、XML文档甚至集合进行交互。 6. **数据访问**:ASP.NET 3.5支持多种数据访问技术,包括ADO.NET、Entity Framework和Linq to SQL。这些工具简化了数据库操作,提高了...

    net.rar_ASP.NET 设计_asp .net_asp.net_asp.net 工作流

    在IT行业中,ASP.NET是一个由微软开发的服务器端Web应用程序框架,用于构建高效、可扩展且功能丰富的Web应用。此“net.rar”压缩包聚焦于ASP.NET的设计与安全方案,特别是工作流相关的知识。让我们深入探讨这些关键...

    基于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基础 ASP.NET 3.5在2.0的基础上进行了扩展,引入了多项新功能...

    基于ASP.NET的工作流批核系统

    在基于ASP.NET的工作流批核系统中,WF技术可以与ASP.NET Web Forms或MVC框架相结合,实现用户界面和后台工作流逻辑的分离。开发人员可以使用WF设计工具创建工作流模板,然后在ASP.NET应用中集成这些模板,以驱动批核...

Global site tag (gtag.js) - Google Analytics