《WF编程》系列之 - 承载工作流:跟踪服务 Tracking Service
时间:2010-11-30 来源:Ben zhang
private static string SerializeProfile(TrackingProfile profile)
{
TrackingProfileSerializer serializer;
serializer = new TrackingProfileSerializer();
StringWriter writer = new StringWriter(new StringBuilder());
serializer.Serialize(writer, profile);
return writer.ToString();
} SQL跟踪服务会在TrackingProfile表中以XML的形式存储跟踪配置(默认跟踪配置保存在DefaultTrackingProfile表 中)。在这张表中更新或插入数据的最好方式是使用UpdateTrackingProfile存储过程。当我们添加了新的跟踪配置,我们必须将这个配置和 一个工作流类型做关联。下面的代码演示了如何将跟踪配置关联到SimpleWorkflow工作流:
private static void UpdateTrackingProfile(string profileAsXml)
{
WorkflowRuntimeSection config;
config = ConfigurationManager.GetSection("WorkflowWithTracking")
as WorkflowRuntimeSection;
using (SqlConnection connection = new SqlConnection())
{
connection.ConnectionString = config.CommonParameters["ConnectionString"].Value;
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "dbo.UpdateTrackingProfile";
command.Parameters.Add(new SqlParameter("@TypeFullName",
typeof(WorkflowWithTrackingService).ToString()));
command.Parameters.Add(new SqlParameter("@AssemblyFullName",
typeof(WorkflowWithTrackingService).Assembly.FullName));
command.Parameters.Add(new SqlParameter("@Version",
"1.0.1"));
command.Parameters.Add(new SqlParameter("@TrackingProfileXml",
profileAsXml));
connection.Open();
command.ExecuteNonQuery();
}
} UpdateTrackingProfile存储过程包含四个参数。@TypeFullName参数需要和跟踪配置相关联的工作流类型的完整名称(包含命 名空间),同样的,@AssemblyFullName参数也需要包含该工作流定义的程序集的完整名称。@Version参数应该指定为跟踪配置的版本 号,@TrackingProfileXml则包含用于表示TrackingProfile对象的XML。
在运行程序后,我们可以通过数据库中的跟踪配置来记录不同的信息。其它工作流则仍然使用默认跟踪配置并记录所有事件。下图演示了示例运行的输出结果,可以看到跟踪服务记录了工作流事件,但却没有记录任何活动事件。

6.4.4 数据维护
SQL跟踪服务提供了一个分区功能来将跟踪信息从跟踪数据表的主数据集(primary data set)移动到分区数据集(partitioned data set)中。这个功能帮助我们管理这些不断增长的跟踪数据。管理员可以移动并归档旧的跟踪信息,并且可以确保当前正在使用的数据分区表永远不会变得过分庞 大。
当分区执行时,会为每一段已经过去了的分区时间间隔创建新数据集的数据表。SetPartionInterval存储过程可以配置分区时间间隔。默认的时 间间隔是一个月,其它可选的值包括一天、一周和一年。分区功能创建的数据表的名称里会包含分区时间。执行分区动作有两种方式:自动分区和手工分区。自动分 区可以通过将SQL跟踪服务的PartitionOnCompletion参数配置为true来启用。自动分区会在工作流执行完之后马上将跟踪信息移动到 新的分区。自动分区适用于那些从不休止的应用程序,但因为每次当工作流完成时都需要记录跟踪信息到分区数据集中,所以会增加一些开销。
我们还可以通过运行PartitionCompletedWorkflowInstances存储过程来使用手工分区。这个存储过程会将已经完成的工作流 的跟踪记录移动到分区表中。手工分区适用于那些总会有一段停机时间的应用程序,这样我们就可以选择在非繁忙时间来执行手工分区
相关阅读 更多 +
- 系统休眠文件删除后果 如何删除计算机的休眠文件 2025-04-22
- 站群服务器是什么意思 站群服务器的作用 站群服务器和普通服务器的区别 2025-04-22
- jQuery插件有何作用 jQuery插件的使用方法 2025-04-22
- jQuery插件有哪些种类 简单的jQuery插件实例 2025-04-22
-