随笔 - 705  文章 - 0  评论 - 1103  阅读 - 138万 

程序下载地址:  https://files.cnblogs.com/TerryFeng/WF2.rar

建立一个空的解决方案,向其中加入一个顺序工作流类库和一个Asp.Net Web 应用程序项目,结果如下图

2009-04-13_143252

向asp.Net 程序中,添加引用,“WF”是工作流项目,如图

2009-04-13_143449

向Web.Config 中加入WF的注册(细节下载代码看一下)。

                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>

        <!--WF注册服务-->
        <section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <!--技术WF注册服务-->

    </configSections>
    
    <!--WF注册服务-->

    <WorkflowRuntime Name="WorkflowServiceContainer">
        <Services>
            <add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add type="System.Workflow.Activities.ExternalDataExchangeService, System.Workflow.Activities, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            
        </Services>
    </WorkflowRuntime>
    <!--结束注册服务-->


    <appSettings/>
    <connectionStrings/>

 

添加一个全局Global.asax 文件,添加如下代码

protected void Application_Start(object sender, EventArgs e)
       {
           
           WorkflowRuntime workflowRuntime = new WorkflowRuntime("WorkflowRuntime");
           workflowRuntime.StartRuntime();
           Application["WorkflowRuntime"] = workflowRuntime;


       }

       protected void Session_Start(object sender, EventArgs e)
       {
           WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;
           workflowRuntime.StopRuntime();

       }

向Default.aspx中添加3个控件,Textbox,button,label  ,双击Button为其添加单击事件,并在default.aspx.cs 中添加如下代码

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
using System.Workflow.ComponentModel;
using System.Workflow.Activities;
namespace AspNet
{
    public partial class _Default : System.Web.UI.Page
    {
        string Result = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            StartWorkflow();
            Label1.Text = Result;
        }

        private void StartWorkflow()
        {
            WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;


            ManualWorkflowSchedulerService scheduler = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;

            workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);

            Dictionary<String, Object> wfPara = new Dictionary<string, object>();

            wfPara.Add("Name", TextBox1.Text);

            WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(WF.Workflow1), wfPara);

            workflowInstance.Start();

            scheduler.RunWorkflow(workflowInstance.InstanceId);
        }

        void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
        {
            if (e.OutputParameters.ContainsKey("Result"))
            {
                Result = (string)e.OutputParameters["Result"];
            }

        }

    }
}

好了,下面,在WF项目中的Workflow1,拖入一个Code控件,如下图

2009-04-13_144435

为CodeActivety1.添加事件代码,方法名字可以自己取,也可以用默认的,我这里用了一个Exefun的方法名,

2009-04-13_145052

代码如下

 

namespace WF
{
    public sealed partial class Workflow1 : SequentialWorkflowActivity
    {

        public string Name { get; set; }

        public string Result { get; set; }


        public Workflow1()
        {
            InitializeComponent();
        }

        private void ExeFun(object sender, EventArgs e)
        {
            Result = "你好:" + Name;
        }
    }

}

好了,编译一下程序,在TextBox中输入字符串,点击按钮看一下。

2009-04-13_144823

posted on   冯瑞涛  阅读(3787)  评论(3编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示