“使用用户跟踪点进行跟踪”示例

Download sample

此示例演示如何使用 Windows Workflow Foundation 提供的 SQL 跟踪服务来跟踪工作流的执行。

工作流运行时在执行工作流时会引发某些事件。 跟踪服务可以捕获这些事件,并将有关这些事件的信息存储在可以查询的 SQL Server 数据库中。

工作流运行时可以引发以下类型的事件:

  • 工作流实例级别事件。 当工作流实例进入某一特定状态时即会引发这些事件。 例如,在初始化工作流实例时或在执行工作流实例的过程中会引发事件。

  • 活动级事件。 工作流由若干活动组成,每个活动都遵循一定的生命周期。 在生命周期期间,活动会经历多种状态。 当活动达到特定状态时即会引发事件。

  • 用户跟踪的事件。 工作流作者可以创建自定义跟踪事件并将其添加到工作流的代码旁置中。

可以发出工作流数据上下文中的数据并将其与事件一起提供给跟踪服务。

在跟踪某个工作流时,您所关注的可能并不是所有状态和活动的所有事件。 可以创建跟踪配置文件来指定关注的事件和数据。

编写自定义跟踪点

在执行跟踪事件未跟踪的工作流时,您可能需要跟踪位于特定位置的一段数据。 在这种情况下,您可以使用自定义跟踪点。 通过使用在数据上下文类上提供的 TrackData 方法来创建自定义跟踪点。 TrackData 方法接受对象的参数。 这意味着您可以发出想要跟踪的任何种类的数据。 在示例工作流中,自定义跟踪点是在代码活动的代码处理程序中创建的。

创建自定义跟踪配置文件

示例演示如何创建自定义跟踪配置文件来跟踪用户跟踪点。 此配置文件将插入到 SQL 跟踪数据库中以跟踪指定的事件。 跟踪配置文件是通过使用跟踪配置文件对象模型创建的。

跟踪配置文件对象模型提供了一组类,可帮助创建实例跟踪点、活动跟踪点和用户跟踪点。 每个跟踪点还包含一组匹配位置。 匹配位置描述要跟踪的事件(取决于该位置是实例跟踪点还是活动跟踪点,事件将有所不同)和要跟踪的活动(对于实例跟踪点为工作流)。

还可以在跟踪点中指定要提取的数据。 在此示例中,尚未指定任何数据提取。

使用下面的代码创建跟踪配置文件以跟踪用户跟踪点:

TrackingProfile profile = new TrackingProfile();

ActivityTrackPoint trackPoint = new ActivityTrackPoint();
ActivityTrackingLocation location = new ActivityTrackingLocation(typeof(Activity));
location.MatchDerivedTypes = true;
foreach (ActivityExecutionStatus s in Enum.GetValues(typeof(ActivityExecutionStatus)))
{
    location.ExecutionStatusEvents.Add(s);
}

trackPoint.MatchingLocations.Add(location);
profile.ActivityTrackPoints.Add(trackPoint);
profile.Version = new Version("3.0.0.0");


// Adding a user track point to the tracking profile.
UserTrackPoint utp = new UserTrackPoint();

// Adding a user location to the track point. 
UserTrackingLocation ul = new UserTrackingLocation(typeof(string), typeof(CodeActivity));
ul.MatchDerivedActivityTypes = true;
utp.MatchingLocations.Add(ul);
profile.UserTrackPoints.Add(utp);


// Serialize the profile.
TrackingProfileSerializer serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
string trackingprofile = writer.ToString();
InsertTrackingProfile(trackingprofile);

在前面的代码示例中,最后四行指定如何能够将跟踪配置文件序列化为 XML 格式并存储在跟踪数据库中。 跟踪配置文件在经过序列化后看起来将如下所示:

<?xml version=\"1.0\" encoding=\"utf-16\" standalone=\"yes\"?>

<TrackingProfile xmlns=\"https://schemas.microsoft.com/winfx/2006/workflow/trackingprofile\" version=\"3.0.0.0\">

<TrackPoints> <ActivityTrackPoint>

<MatchingLocations>

<ActivityTrackingLocation>

<Activity>

<Type>System.Workflow.ComponentModel.Activity, System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<ExecutionStatusEvents>

<ExecutionStatus>Initialized</ExecutionStatus>

<ExecutionStatus>Executing</ExecutionStatus>

<ExecutionStatus>Canceling</ExecutionStatus>

<ExecutionStatus>Closed</ExecutionStatus>

<ExecutionStatus>Compensating</ExecutionStatus>

<ExecutionStatus>Faulting</ExecutionStatus>

</ExecutionStatusEvents>

</ActivityTrackingLocation>

</MatchingLocations>

</ActivityTrackPoint>

<UserTrackPoint>

<MatchingLocations>

<UserTrackingLocation>

<Activity>

<Type>System.Workflow.Activities.CodeActivity, System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</Type>

<MatchDerivedTypes>true</MatchDerivedTypes>

</Activity>

<Argument>

<Type>System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</Type>

<MatchDerivedTypes>false</MatchDerivedTypes>

</Argument>

</UserTrackingLocation>

</MatchingLocations>

</UserTrackPoint>

</TrackPoints>

</TrackingProfile>

跟踪配置文件是通过使用跟踪配置文件架构创建的。

将跟踪配置文件插入 SQL 跟踪数据库

跟踪配置文件是通过使用 UpdateTrackingProfile 存储过程插入到跟踪配置文件数据库中的。 该存储过程存储特定工作流类型的配置文件。 当运行时向跟踪服务请求该类型的配置文件时,跟踪服务将返回此自定义配置文件,而不是默认配置文件。

向工作流宿主注册跟踪服务

使用下面的代码可以向工作流运行时注册跟踪服务:

WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.AddService(new SqlTrackingService(connectionstring));
workflowRuntime.StartRuntime();

第二行向工作流运行时注册 SQL 跟踪服务。 连接字符串是跟踪数据库的连接字符串。

创建跟踪数据库

由 Windows Workflow Foundation 安装的 SQL 服务使用 Microsoft SQL Server 来存储信息。 可以对这些任务使用 Microsoft SQL Server 2005 Express、SQL Server 2000 或更高版本或 SQL Server 2000 Desktop Engine (MSDE)。

Windows Workflow Foundation 安装程序并不安装这些服务所需的数据库,但会安装用于为这些服务创建和配置数据库的 SQL 脚本。

创建 SQL 跟踪数据库

  1. 在 Microsoft SQL Server 2005 Express、SQL Server 2000 或更高版本或 SQL Server 2000 Desktop Engine (MSDE) 中,使用如下 SQL 查询语句创建名为 Tracking 的新数据库:

    CREATE DATABASE Tracking

    注意:在工作流应用程序中同时使用 SqlTrackingServiceSqlWorkflowPersistenceService 时,建议对持久性服务和跟踪服务使用单一数据库。

  2. 在 SQL 查询分析器工作区中,从可用数据库列表中选择在步骤 1 中创建的数据库。

  3. 在**“文件”菜单上,单击“打开”**并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\Tracking_Schema.sql

  4. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 跟踪服务表。

  5. 在**“文件”菜单上,单击“打开”**并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\Tracking_Logic.sql

  6. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 跟踪服务存储过程。

生成示例

  1. 通过单击**“下载示例”**来下载该示例。

    这会将示例项目提取到本地硬盘。

  2. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  3. 转到示例的源目录。

  4. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 UserTrackPoints\bin\debug 文件夹(对于该示例的 VB 版本为 UserTrackPoints\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。

请参见

参考

SqlTrackingService
SqlTrackingQuery
SqlTrackingWorkflowInstance
ActivityEvents
ActivityTrackingRecord
WorkflowEvents
WorkflowTrackingRecord

其他资源

“跟踪”示例
“简单的跟踪”示例
“使用 SQLTrackingService 进行查询”示例
“EventArgs 跟踪”示例
ConsoleTrackingService 示例
“使用 SQLTrackingService 进行查询”示例
RuleActionTrackingEvent 示例
“文件跟踪服务和查询”示例
“使用跟踪配置文件对象模型”示例
“SQL 数据维护”示例
Windows Workflow Tracking Services

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。