一起学WF3.5【7】

我们通过一个例子说明上文所说的跟踪服务的使用。

一个使用SqlTracingService进行工作流跟踪的例子

创建一个跟踪数据库

WF为使用Sql Server提供了内置的创建支持。

创建一个名为WorkflowTracking的数据库,在C:\Windows\Microsoft.NET\Framework\3.0\WindowsWorkflow Foundation\SQL\ZH-CHS,在新建的数据库中执行Tracking_Schema.sql脚本,再执行Tracking_Logic.sql脚本。这些脚本将创建数据库角色、表和视图及存储过程以和你的工作流进行交互。

 

仿照前边的例子创建一个工作流

回想一下我们前面创建工作流的过程。在这里把工作流程序和宿主程序分开。

首先我们创建一个顺序工作流库项目,命名为TrackedWorkflow。

打开工作流设计器。拖入一个IfElse活动,如下图。

在左侧的分支上单击,激活它的属性。

在它的Condition属性中选择“代码条件”。点左侧的加号,在展开的Condition子属性中输入方法名QueryDelay。这个方法将决定执行IfElse活动的哪个分支。

接着我们将一个Code活动到IfElse的左边分支上。我们在活动的惊叹号上点击打开它的属性面板。在ExecuteCode属性中输入PreDelayMessage。

像前面做过的一样,我们在左侧分支继续拖入一个Delay活动和一个Code活动。设置Delay活动的属性活动延时10秒,第二个Code活动执行一个名称为PostDelayMessage的方法。完成后如下图:

 

设计器的工作完成后我们添加代码。在工程中添加引用:System.Window.Forms,在Workflow.cs添加:using System.Windows.Forms;

在生成的PreDelayMessage函数中添加:

MessageBox.Show(“Pre-delaycode is being executed.”);

PostDelayMessage中添加:

MessageBox.Show("Post-delay code isbeing executed.");

在QueryDelay中添加以下代码:

privatevoid QueryDelay(object sender, ConditionalEventArgs e)

        {

            e.Result= false; // 假定我们不延时...

            if(MessageBox.Show("Okay to execute delay in workflow processing?",

                 "Query Delay",

                 MessageBoxButtons.YesNo,

                 MessageBoxIcon.Question) == DialogResult.Yes)

            {

               // 需进行延时处理

               e.Result = true;

 

               // 显示消息

               Console.WriteLine("Delay path taken...");

            }// if

           else

            {

               // 显示消息

               Console.WriteLine("Delay path NOT taken...");

            }// else

        }

 

接下来创建一个控制台程序。添加System.Workflow.Activities、System.Workflow.ComponentModel、System.Workflow.Runtime,并添加对TrackedWorkflow的引用。

我们直接把之前在workflowHost中创建的WorkflowFactory.cs复制到本工程下,注意修改命名空间。

同样像在workflowHost中的Program.cs中一样,在Main函数前添加:

private static AutoResetEvent waitHandle =new AutoResetEvent(false);

 

在Main函数中添加:

WorkflowRuntime workflowRuntime =WorkflowFactory.GetWorkflowRuntime();

workflowRuntime.WorkflowIdled += newEventHandler<WorkflowEventArgs>(workflowIdled);

workflowRuntime.WorkflowCompleted += newEventHandler<WorkflowCompletedEventArgs>(workflowCompleted);

workflowRuntime.WorkflowTerminated += newEventHandler<WorkflowTerminatedEventArgs>(workflowTerminated);

在Main函数外添加三个响应函数:

staticvoid workflowTerminated(object sender, WorkflowTerminatedEventArgs e)

        {

           Console.WriteLine("Workflow instance terminated.");

           waitHandle.Set();

        }

 

        // The"completed" event handler (ran to completion, no errors).

        staticvoid workflowCompleted(object sender, WorkflowCompletedEventArgs e)

        {

           Console.WriteLine("Workflow instance completed.");

           waitHandle.Set();

        }

 

        // The"idled" event handler.

        staticvoid workflowIdled(object sender, WorkflowEventArgs e)

        {

           Console.WriteLine("Workflow instance idled.");

        }

 

以上只是借用workflowHost中的一些代码。

在Main函数最后添加:Console.WriteLine("Waiting for workflow completion.");

WorkflowInstance instance =workflowRuntime.CreateWorkflow(typeof(TrackedWorkflow.Workflow1));

instance.Start();

waitHandle.WaitOne();

 

编译运行。

 

添加SqlTrackingService

准备工作完成了,现在我们添加代码以执行跟踪。

 

在主程序中添加一些逻辑。首先添加System.Configuration引用,用它把数据库的连接字符串存储到应用程序配置文件里。

添加一个名为App.config文件。在文件中添加:

<connectionStrings>

<addname="TrackingDatabase"connectionString="Data Source=localhost;InitialCatalo

g=WorkflowTracking;IntegratedSecurity=True;"/>

</connectionStrings>

 

在WorkflowTracker的WorkflowFactory.cs文件中,添加名称空间:

using System.Workflow.Runtime.Tracking;

using System.Configuration;

在GetWorkflowRuntime方法中添加如下代码:

String conn =ConfigurationManager.ConnectionStrings["TrackingDatabase"].ConnectionString;

_workflowRuntime.AddService(newSqlTrackingService(conn));

 

编译,执行。可以在WorkflowTracking数据库的ActivityInstance表中看到写入的数据。

 

简单的先说到这,东西有点多,下面接着讨论。本节可以对以前做一次复习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,生可以习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,生可以习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值