快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

亚游官方网址是多少:WF从入门到精通(第五章):workflow跟踪



进修完本章,你将掌握:

1.workflow的可选办事

2.创建一个事故跟踪数据库

3.激活事故跟踪办事

4.创建一个自定义跟踪

5.查看你的workflow的跟踪信息

今朝为止,我们看过workflow的一些基础工具。我们经由过程活动创建workflow义务,它们在履行时由WorkflowInstance工具进行治理。workflow实例由WorkflowRuntime编入行列步队并进行节制。但WF不光是为我们供给了这些工具,它也为我们供给了一些办事来和这些工具一路协同事情。

可插拔(可选)办事

事情流办事是一些附加的软件库,你的事情流能应用它来完成它们的的义务。有些办事长短必须可选的,如本章先容的跟踪办事。而其它的办事必要你的事情流必须履行它。

一个可插拔办事是这样一个办事,它能像照菜单点菜一样当选中以履行特定义务。例如,有治理线程的办事、跟踪的办事、事务办事等等。你可选择那些得当你的事情流的办事。你以致还能自己进行创建。

哪这些办事看起来像什么?他们能为我们做什么?表5-1列出了可获取的基础办事,它很好地为你描述了这些可获取的办事的观点,并奉告你他们能做什么。

傍边的大年夜部分办事我们不会直接应用。我们普遍的用法是应用从这些基础办事亚游官方网址是多少派生出的办事。

表5-1 基础事情流办事

办事

功能

WorkflowPersistenceService

抽象基类,派生出所有持久化的办事。

WorkflowQueuingS亚游官方网址是多少ervice

该基类为你供给了一些措施,使你能用来治理和一个事情流实例相关的事情流行列步队。

WorkflowRuntimeService

抽象基类,派生出事情流运行时的内查究事。

WorkflowScheddulerService

所有在事情流运行时宿主上创建线程以运行事情流实例的类的基类。

WorkflowSubscriptionService

那些治理订阅(Subscriptions)事情流运行时类的基类。

WorkflowTransactionService

所有事务办事的基类。

TrackingService

一个抽象基类,在跟踪办事和运行时跟踪根基布局(infrastructure)间供给了基础的接口。  请记着这些是基类。我们应用的办事实际上从它们派生。例如,当我们运行一个事情流实例时,无意偶尔需为实例创建一个线程去应用。DefaultWorkflowSchedulerService恰是做这个事情的,它应用WorkflowSchedulerService作为它的基类。但要是你想自己供给这个线程,你可应用ManualWorkflowSchedulerService代替。在本章中我们将看到由SqlTrackingService供给的跟踪办事,它应用了TrackingService作为它的基类。

“可插拔(可选)”一词部分滥觞于下面的环境:你可能斟酌在任何光阴上你都可能必要应用一个调整法度榜样办事,运行时办事,入队和订阅(准时器)办事。但你还能在事情中进一步添加持久化和跟踪办事,以及外部数据通信办事。

事情流跟踪

在本章,我们将把重点放到跟踪办事上。其它办事将在其它章节进行先容。WF由一个主要的跟踪办事——SqlTrackingService承载。然则要是你必要的话,也有两个额外的办事可用。它们是ConsoleTrackingService和SimpleFileTrackingService,这二个办事容许你把跟踪信息写到节制台窗口或者文件中而不是Microsoft SQL Server数据亚游官方网址是多少库。在这里我们不会应用这两种办事,但你必要的话你可应用它们。

应用SqlTrackingService进行事情流事故跟踪

经由过程添加一个跟踪办事(平日是SqlTrackingService)到事情流运行时中,你可跟踪你的事情流的处置惩罚历程。要是你有特定的跟踪需求,你也能创建你自定义的跟踪事故。要是捕获的事故为你供给了过多的跟踪数据,你也能创建跟踪设置设置设备摆设摆设文件来过滤这些跟踪数据。

当跟踪的事故引发时,WF创建并治理跟踪记录。只管你不用做这些事情,但你照样能轻易地从WF中直接造访这些跟踪记录。你要知道这些信息也被记录到数据库中,是以直接从数据库中检索这些信息也是可能的。平日都在记录这些跟踪信息后的某个光阴,应用一个象WorkflowMonitor或你自己设计的对象之类的外部跟踪监控对象,来查询这些跟踪信息。

表5-2列出了在你的WF事故跟踪中常常应用的工具,在本章我们将应用此中的一些。要是你必要自定义你的事情流事故跟踪,那你应知道WF为你供给了一个和跟踪相关工具的强大年夜类库。

表5-2 事故跟踪工具

工具

功能

指定要从活动中提取并在跟踪点匹配时与关联的批注聚拢一路发送到跟踪办事的属性或字段。

ActivityTrackingCondition

表示一个前提,该前提经由过程应用指定的对照运算符将活动成员的值与指定值进行对照。

ActivityTrackingLocation

定义与根事情流实例的可能履行路径中的某个活动状态事故相对应的活动限制位置。

ActivityTrackingRecord

包孕运行库跟踪根基布局在 ActivityTrackPoint 匹配时发送到跟踪办事的数据。它还用在 ActivityEvents 属性的返回列表中。

ActivityTrackPoint

定义事情流实例的可能履行路径中要跟踪的点,该点与活动履行状态变动关联。

SqlTrackingQuery

包孕用于治理跟踪数据查询的措施和属性,跟踪数据包孕在 SqlTrackingService 应用的 SQL 数据库中。

SqlTrackingQueryOptions

包孕一些属性,这些属性用于约束 SqlTrackingQuery.GetWorkflows 调用所返回 SqlTrackingWorkflowInstance 工具的聚拢。

SqlTrackingWorkflowInstance

经由过程事情流实例的 SqlTrackingService 供给对SQL数据库中保留的跟踪数据的造访

TrackingProfile

定义根事情流实例的可能履行路径中的关注点,应将有关该关注点的信息看护跟踪办事。它过滤跟踪事故,并把过滤后的跟踪记录返回给某个跟踪办事。这里有三种类型的跟踪事故能被过滤:活动状态事故、事情流状态事故和用户事故。

UserTrackingLocation

定义与根事情流实例的可能履行路径中的某个用户事故相对应的活动限制位置。

UserTrackingRecord

包孕运行库跟踪根基布局在 UserTrackPoint 匹配时发送到跟踪办事的数据。

UserTrackPoint

定义一个要跟踪的点(与用户事故关联),该点位于根事情流实例的可能履行路径中。

WorkflowDataTrackingExtract

指定要从事情流的根活动中提取,并在跟踪点匹配时随关联的批注聚拢一路发送到跟踪办事的属性或字段。

WorkflowTrackingLocation

定义对发生在根事情流实例中的特定事情流事故的关注;用于按跟踪设置设置设备摆设摆设文件中的 WorkflowTrackPoint 进行匹配。

WorkflowTrackingRecord

包孕运行时跟踪根基布局在匹配了 WorkflowTrackPoint 时发送到跟踪办事的数据。它还用在 WorkflowEvents 属性的返回列表中。

WorkflowTrackPoint

定义一个与一组事情流状态事故关联的点,这些事故在根事情流实例的可能履行路径中进行跟踪。  这些工具可斟酌归为两个大年夜类:跟踪数据检索和跟踪具体阐明。跟踪检索工具,如SqlTrackingQuery,一旦跟踪数据被存储到数据库中,你可应用它们采集跟踪数据。跟踪具体阐明工具,如跟踪点和位置工具,容许你能在事情流代码中节制该跟踪什么。

像跟踪点和位置工具之类的跟踪具体阐明工具还可被归为三大年夜组:活动事故、事情流事故和用户事故。和活动相关的跟踪工具,如 ActivityTrackingPoint 或 ActivityTrackingLocation,用来记录相关联的活动的事故信息并保存到跟踪数据库中。这些事故包孕如下这些:活动取消、未处置惩罚的非常和履行的事故。事情流事故跟踪工具的事情要领和事情流相关的事故的事情要领相像(但事情流启动和竣事,实例的创建、余暇和完成及其它相似的相关联的事故除外)。着末是用户事故跟踪,它用在自定义你特有的事情流跟踪需求中指定你的事情流并完全依附于你的事情流想如何进行跟踪。在本章中当我们进修跟踪设置设置设备摆设摆设文件时会看到它们中的几个。

跟踪记录经由过程批注加以装饰。批注是一些保存跟踪记录并被记录进跟踪数据库的字符串。关联活动和关联事情流的跟踪记录有一个创建好的批注的聚拢,但你可以为用户关联事故的跟踪记录供给一个额外的批注。

在WF中跟踪这一术语和寻常“跟踪”的观点没有什么不合。寻常意义上的“跟踪”是一个有用的调试对象,在ASP.NET、像WPF之类的.NET技巧及Windows Forms中都支持跟踪调试的能力。跟踪容许你过滤跟踪信息记录以满意你的必要,你既可只看非常的跟踪信息,也能看到全部跟踪栈。

WF跟踪基于相似的观点,事实上是过滤。正如你可能想到的,关联活动事故和关联事情流事故将孕育发生所有类型的跟踪记录,你或许能从中找到感兴趣的记录(如未处置惩罚的非常或余暇状态),你可以抉择其它的事故不用进行跟踪。

为过滤掉落你不想进行跟踪的事故,你要创建一个跟踪设置设置设备摆设摆设文件。一个跟踪设置设置设备摆设摆设文件是一个XML文档,它指清楚明了跟踪的工具和要扫除跟踪的工具。和跟踪不合,跟踪设置设置设备摆设摆设文件指明哪些器械要写入跟踪数据库,而不是指明今后哪些器械能被查看到。要是你扫除了一些事故,这些扫除的事故就不会向数据库里写任何器械。和跟踪的另一个不合之处是,跟踪设置设置设备摆设摆设文件的XML文档也被记录进跟踪数据库,当履行事情流时被规复。换句话说,跟踪记录了指定的要去跟踪的任何器械,但不进行跟踪信息归类。

设置SQL Server进行跟踪

只管你可创建自定义的跟踪办事来把跟踪数据记录进各类存储中(如消息行列步队或数据文件),但本章,我们将把留意力放到SQL Server 2005数据库上,WF有能力把事故数据记录到SQL Server 2005数据库中。WF为应用SQL Server 2005供给了内置的创建支持。

我们先在SQL Server Management Studio(或者Express版本)中创建一个新的数据库。然后需运行一些由WinFX组件供给的SQL脚本,这些脚本将创建数据库角色、表和视图、必须的存储历程以和你的事情流进行交互。我们就来经由过程创建一个新数据库并运行一些筹备好的脚原先开始吧,然后我们将应用WF跟踪办事记录下跟踪数据并写入数据库。

备注:我鄙人面的步骤中应用SQL Server Express,但这些步骤对付其它版本的SQL Server 2005同样适用。

创建一个SQL Server 2005跟踪数据库

1.启动SQL Server Management Studio,连接数据库引擎。

2.在数据库节点上单击右键激活右键快捷菜单,选择“新数据库”。

3.在新数据库对话框中输入“WorkflowTracking”作为数据库的名称字段,点击确定。

4.下一步将履行WF为设置跟踪所供给的脚本(这会创建表、视图以及事情流跟踪的角色)。这些脚本的位置在Microsoft.NETFramework3.0Windows Workflow FoundationSQLZH-CHS,在这里是指你的Windows目录(平日是C:Widows)。在SQL Server Management Studio打开Tracking_Schema.sql文件。

5.SQL Server Management Studio会在一个新窗口中导入文件中的脚本,但在我们运行脚本前,我们需指明在哪个数据库中运行这些脚本,是以我们要选择WorkflowTracking数据库。

6.点击对象栏上的履行按钮履行这些脚本。

7.重复4-6步履行Tracking_Logic.sql脚本。这将在数据库中创建必须的存储历程。

我们现在就创建了一个将记录跟踪信息的数据库,但如何获得已记录的信息呢?什么组件进行这方面的事情呢?让我们看看!

应用SqlTrackingServer办事

在事情流跟踪数据库设置好后,现在便是实际应用它的时刻了。我们先创建一个新的事情流并看看我们如何去跟踪事故。我们将创建一个亚游官方网址是多少轻细繁杂一些的事情流,里面有几个事故可以供给给我们去进行跟踪。在我们创建一个原始的事情流后,我们将增添需要的跟踪代码。

创建一个新事情流并进行跟踪

1.为更方便些,我已创建了两个版本的样例利用法度榜样。Workflow包孕两个不合版本的利用法度榜样:一个是不完全版本,一个是完全版本。完全版本已完全编写完成并可直接运行,非完全版本可方便你进行改动,并按步骤完成响应演习。你可经由过程本章后面的下载链接下载这些项目文件。

2.下载本章源代码,打开TrackedWorkflow办理规划,像第三章中响应步骤一样创建一个顺序事情流库的项目,名称为TrackedWorkflow。

3.在你完成以上步骤后,Visual Studio会打开事情流设计器以便进行编辑。

4.从对象箱中拖动一个IfElse活动到设计器界面上。如下图:

5.单击左边的ifElseBranchActivity1分支,激活它的属性使其在Visual Studio中的属性窗口中显示。

6.探求 ifElseBranchActivity1 的 Condition 属性。点击下拉列表框上向下的箭头打开下拉列表框,选择此中的代码前提节点。如下图:

7.Condition 属性现在会在它的左边出现出一个“+”号。单击这个+号展开其属性网格,这会裸露出Condition属性的Condition名称字段。在编辑框中,输入QueryDelay。我们将应用这个措施来抉择我们将履行IfElse活动的那个分支。

8.下一步我们在左边的分支(这个分支在前提值为True时履行)添加一些活动。首先,从对象箱中拖拽一个Code活动到IfElse的左边分支即ifElseBranchActivity1上。

9.你看到的赞叹号标记的意思在前面的章节我已描述过,意思是我们还有事情要做。在这里,它指出我们需添加一个措施,Code活动添加到事情流中履行时将调用这个措施。亚游官方网址是多少在Visual Studio的属性面板上,定位到 ExecuteCode 属性,在该编辑框中输入PreDelayMessage。

10.大概你要看看我要做什么……着实便是添加一个延时事情流,在第三章我们已经创建过。就像在第三章做的一样,再拖拽一个Delay活动和另一个Code活动进ifElseBranchActivity1中,然后设置它们的属性。Delay活动延时10秒(00:00:10),第二个Code活动履行一个名称为PostDelayMessage的措施。完成这些步骤后的设计器界面如下图所示:

11.在设计器中的事情完成后,我们就来添加响应代码。在办理规划资本治理器中的Workflow1.cs文件上单击右键,选择查看代码。然后在项目中添加对System.Windows.Forms的引用,然后在Workflow1.cs文件的顶部声明和其对应的下面的名称空间。

using System.Windows.Forms;

12.你查看这个文件,你会看到Visual Studio为你添加的作为活动属性的三个事故处置惩罚法度榜样:PreDelayMessage、PostDelayMessage和QueryDelay。和第三章类似,在Code活动中添加消息对话框,以使利用法度榜样能在事情流履行时看护你。对付PreDelayMessage,添加下面的代码:

MessageBox.Show("Pre-delay code is being executed.");

对付PostDelayMessage,添加下面的代码:

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

13.我们些许更感兴趣的是在QueryDelay中添加的以下代码:

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

14.完成上述步骤后,我们必要为我们的WorkflowTracker主利用法度榜样添加对事情流项目TrackedWorkflow的项目引用,步骤略。

15.在WorkflowTracker项目中打开Program.cs文件,查找下面的代码:

Console.WriteLine("Waiting for workflow completion.");

16.为创建一个Workflow实例,在上述代码下添加下面的代码:

// 创建事情流实例。

WorkflowInstance instance =

workflowRuntime.CreateWorkflow(typeof(TrackedWorkflow.Workflow1));

// 启动事情流实例。

instance.Start();

17.编译办理规划,矫正任何编译差错。

18.按下F5(或Ctrl+F5)履行这个利用法度榜样,你将看到以下节制台的输出结果:

我们现在就有了一个基础的事情流,我们可应用它去体验WF的跟踪能力。我们现在就回去添加我们必要的代码以履行跟踪。

为我们的事情流添加SqlTrackingService

1.WF由活动和事情流事故跟踪能力承载,是以我们不需为跟踪事故做太多事情。只管如斯,我们仍旧需在主法度榜样文件中添加一些逻辑。首先,要为WorkflowTracker利用法度榜样添加System.Configuration引用,我们必要它来把造访数据库的连接字符串存储到利用法度榜样的设置设置设备摆设摆设文件里。

2.下一步,为WorkflowTracker利用法度榜样添加一个利用法度榜样设置设置设备摆设摆设文件。措施是在Visual Studio的办理规划治理器中的WorkflowTracker树节点上单击右键,依次选择添加、新建项。在出现的添加新项对话框中选择利用法度榜样设置设置设备摆设摆设文件,点击确定。这就为我们的利用法度榜样添加了一个新的app.config文件。拜见下图:

3.打开app.config文件,在Configuration的开始标记和停止标记间插入下面的内容:

WF从入门到精晓(第一章):WF简介

WF从入门到精晓(第二章):workflow运行时

WF从入门到精晓(第三章):workflow实例

WF从入门到精晓(第四章):活动及workflow类型先容

WF从入门到精晓(第五章):workflow跟踪

WF从入门到精晓(第六章):加载和卸载实例

WF从入门到精晓(第七章):基础活动的操作

WF从入门到精晓(第八章):调用外部措施及事情流(一)

WF从入门到精晓(第八章):调用外部措施及事情流(二)

WF从入门到精晓(第九章):逻辑流活动

WF从入门到精晓(第十章):事故活动

WF从入门到精晓(第十一章):并交活动

WF从入门到精晓(第十二章):策略和规则

WF从入门到精晓(第十三章):打造自定义活动(一)

WF从入门到精晓(第十三章):打造自定义活动(二)

WF从入门到精晓(第十四章):基于状态的事情流

WF从入门到精晓(第十五章):事情流和事务

WF从入门到精晓(第十六章):声明式事情流

WF从入门到精晓(第十七章):关联及本地主机通信(上)

WF从入门到精晓(第十七章):关联及本地主机通信(下)

本文示例源代码或素材下载

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: