Windows workflow foundation SqlTrackingService 详解(1) —跟踪workflow 的状态

Windows workflow foundation  SqlTrackingService 详解(1

跟踪workflow 的状态

如果想使用wwf 进行开发,最重要的就是跟踪workflowactivity 的运行状态。

本文章分几个部分,详细的解释wwf 里面SqlTrackingService的情况。

 

概念解释: 3种跟踪类型

workflow Events      跟踪 workflow instance 的状态。

例如: 'Initialized' 'Executing'

Activity Level Events跟踪Activity instance 的状态

User Tracked events   跟踪用户自指定的Activity的状态

 

1.      建立Tracking数据库

下载Windows Workflow Foundation Hands-On Lab RC版本的).

运行C:/Windows Workflow FoundationRC/Labs/SQL_Scripts/Lab03里面的CreateDatabaseObjects.cmd 文件.

如果运行成功将出现如下画面

 

注:需要的sql server2005或者 sql server2005/SQLEXPRESS,

笔者的修改 修改了Osql -S %COMPUTERNAME%/SQLEXPRESS -E  -n -i "Create_TrackingStore.Sql"

变成了Osql -S %COMPUTERNAME% -E  -n -i "Create_TrackingStore.Sql"

 

 

2.      建立Test工程

 

建立一个C#的“Sequential Workflow Console Application”.的工程

 

 

3.      workflow1.cs的名称改为SimpleWorkflow.cs

4.      添加引用如下:

 

using System;

using System.Data;

using System.Data.Sql;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using System.Globalization;

using System.IO;

using System.Collections.Generic;

using System.Text;

using System.Threading;

using System.Workflow.ComponentModel;

using System.Workflow.Activities;

using System.Workflow.Runtime;

using System.Workflow.Runtime.Hosting;

using System.Workflow.Runtime.Tracking;

 

5.      拖一个codeAcivityworkflow,并改名为working

 

6.      code Acivity加入代码

Private void working_ExecuteCode (object sender, EventArgs e)

{

     Console.WriteLine("Here in working_ExecuteCode.");

}

 

7.      Program.cs中加入static 变量

class Program

{

        static string connectionString = "Initial Catalog=TrackingStore;Data Source=localhost; Integrated Security=SSPI;";

       ……

    }

7.   修改Main函数如下:

 

        static void Main (string[] args)

        {

            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())

            {

                SqlTrackingService trackingServer = new SqlTrackingService(connectionString);

 

                workflowRuntime.AddService(trackingServer);

 

                AutoResetEvent waitHandle = new AutoResetEvent(false);

                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};

                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)

                {

                    Console.WriteLine(e.Exception.Message);

                    waitHandle.Set();

                };

 

                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(DefaultSQLServices.Workflow99));

                instance.Start();

                instance.Suspend("Reason we are suspending the workflow.");

                instance.Resume();

waitHandle.WaitOne();

                // 取得Insance的运行情况

                GetInstanceTrackingEvents(instance.InstanceId);

                Console.WriteLine("Workflow Completed - press ENTER to continue");

                Console.Read();

            }

        }

8.      完成函数GetInstanceTrackingEvents

        static void GetInstanceTrackingEvents(Guid instanceId)

        {

            Console.WriteLine("/r/nInstance Tracking Events :");

 

            SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);

            SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;

            sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);

 

            try

            {

                foreach (WorkflowTrackingRecord workflowTrackingRecord in sqlTrackingWorkflowInstance.WorkflowEvents)

                {

                    Console.WriteLine("EventDescription : {0}  DateTime : {1}",

 workflowTrackingRecord.TrackingWorkflowEvent, workflowTrackingRecord.EventDateTime);

                }

            }

            catch (Exception)

            {

                Console.WriteLine("No Instance Tracking Events Found");

            }

        }

8.   GetInstanceTrackingEvents函数,主要使用SqlTrackingQuery类,取得WorkflowInstance的运行情况

9.   运行后显示情况如下:

10.涉及的表

   

表名称

用途

备注

TrackingProfile

存储Tracking 的配置,现在使用的是缺省配置,不需要设置.

 

vw_Workflow

Workflow的基本信息

 

vw_WorkflowInstance

已经或者正在运行的WorkflowInstance

 

vw_Activity

Activity的基本信息

 

vw_ActivityInstance

已经或者正在运行的ActivityInstance

 

 

11.总结:这是最简单的对workflow的跟踪,笔者将继续完成其他的部分。

 

参考资料

WinFx  Windows workflow foundation Hands-On Lab 03

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值