WF中的跟踪服务(3):使用SqlTrackingService跟踪规则
2008-11-22 15:18
337 查看
在坚持学习WF(22):跟踪规则这篇文章我们讲述了如何使用Trace来对规则进行跟踪,我们也可以使用SqlTrackingService跟踪规则,我们先来建立一个顺序型工作流程序,工作流设计器中我们只添加一个PolicyActivity活动,并设计他的RuleSet,我们还是使用坚持学习WF(22):跟踪规则这篇文章中的RuleSet,具体请看下表:
工作流代码中添加相关变量如下:
privateintA=12;
privateintD=99;
privateintB=0;
privatestringC="";
宿主程序中我们加载SqlTrackingService服务,代码如下:
这样跟踪数据就写入到跟踪数据库中了,我们还是使用WF中的跟踪服务(2):使用SqlTrackingService这篇文章中的
TrackingConsoleWriter类来将跟踪信息显示出来,代码如下:
TrackingConsoleWritertrackingWriter=newTrackingConsoleWriter(strConn);
trackingWriter.DisplayTrackingData(instance.InstanceId);
我们使用SqlTrackingQuery查询的时候。SqlTrackingWorkflowInstance有一个UserEvents属性,该属性包括UserTrackingRecord集合,每一个UserTrackingRecord都有一个UserData属性。如果这个UserTrackingRecord包含Rule数据的话,该UserData属性是一个RuleActionTrackingEvent对象的实例,该对象里包含RuleName和ConditionResult属性。当规则执行时,将发送RuleActionTrackingEvent对象作为用户跟踪点。在我们自己开发的TrackingConsoleWriter类中,下面的代码是处理这个的:
UserTrackingRecorduserRecord=recordasUserTrackingRecord;
if(userRecord.UserDataisRuleActionTrackingEvent)
{
WriteRuleData(userRecord);
}
执行工作流结果如下:
上面的结果中包含RuleSet中各个规则的计算情况,下一篇文章中我们使用自定义跟踪配置文件来跟踪Rule中具体的变量的变化情况。
Rule | Conditon | ThenAction | ElseAction |
RuleC | this.D<100 | this.B=this.B-12 System.Console.WriteLine("RuleC:Then"+this.B) | |
RuleB | this.B>50 | this.C="Preferred" System.Console.WriteLine("RuleB:Then"+this.C) | this.C="Normal" System.Console.WriteLine("RuleB:Else"+this.C) |
RuleA | this.A>10 | this.B=60 System.Console.WriteLine("RuleA:Then"+this.B) | this.B=40 System.Console.WriteLine("RuleA:Else"+this.B) |
privateintA=12;
privateintD=99;
privateintB=0;
privatestringC="";
宿主程序中我们加载SqlTrackingService服务,代码如下:
namespaceCarySqlRuleTracking { classProgram { privatestaticStringstrConn=String.Format("InitialCatalog={0};DataSource={1}; IntegratedSecurity={2};","WorkflowTracking",@"localhost\SQLEXPRESS","SSPI"); staticvoidMain(string[]args) { using(WorkflowRuntimeworkflowRuntime=newWorkflowRuntime()) { SqlTrackingServicests=newSqlTrackingService(strConn); AutoResetEventwaitHandle=newAutoResetEvent(false); workflowRuntime.WorkflowCompleted+=delegate(objectsender, WorkflowCompletedEventArgse){waitHandle.Set();}; workflowRuntime.WorkflowTerminated+=delegate(objectsender, WorkflowTerminatedEventArgse) { Console.WriteLine(e.Exception.Message); waitHandle.Set(); }; workflowRuntime.AddService(sts); WorkflowInstanceinstance=workflowRuntime.CreateWorkflow(typeof( CarySqlRuleTracking.CarySqlRuleTrackingWorkflow)); Console.WriteLine("---工作流执行开始---"); instance.Start(); waitHandle.WaitOne(); Console.WriteLine("---工作流执行结束---"); TrackingConsoleWritertrackingWriter=newTrackingConsoleWriter(strConn); trackingWriter.DisplayTrackingData(instance.InstanceId); } } } }
这样跟踪数据就写入到跟踪数据库中了,我们还是使用
TrackingConsoleWriter类来将跟踪信息显示出来,代码如下:
TrackingConsoleWritertrackingWriter=newTrackingConsoleWriter(strConn);
trackingWriter.DisplayTrackingData(instance.InstanceId);
我们使用SqlTrackingQuery查询的时候。SqlTrackingWorkflowInstance有一个UserEvents属性,该属性包括UserTrackingRecord集合,每一个UserTrackingRecord都有一个UserData属性。如果这个UserTrackingRecord包含Rule数据的话,该UserData属性是一个RuleActionTrackingEvent对象的实例,该对象里包含RuleName和ConditionResult属性。当规则执行时,将发送RuleActionTrackingEvent对象作为用户跟踪点。在我们自己开发的TrackingConsoleWriter类中,下面的代码是处理这个的:
UserTrackingRecorduserRecord=recordasUserTrackingRecord;
if(userRecord.UserDataisRuleActionTrackingEvent)
{
WriteRuleData(userRecord);
}
privatestaticvoidWriteRuleData(UserTrackingRecorduserRecord) { RuleActionTrackingEventruleAction=userRecord.UserDataasRuleActionTrackingEvent; Console.WriteLine("{0:HH:mm:ss.fff}RuleActionfrom{1}Rule:{2}Result:{3}", userRecord.EventDateTime,userRecord.QualifiedName, ruleAction.RuleName,ruleAction.ConditionResult); }
执行工作流结果如下:
上面的结果中包含RuleSet中各个规则的计算情况,下一篇文章中我们使用自定义跟踪配置文件来跟踪Rule中具体的变量的变化情况。
相关文章推荐
- WF中的跟踪服务(3):使用SqlTrackingService跟踪规则
- WF中的跟踪服务(2):使用SqlTrackingService
- WF中的跟踪服务(2):使用SqlTrackingService
- WF中的跟踪服务(5):SqlTrackingService 的数据维护
- 工作流(WF)中使用SqlWorkflowPersistenceService创建完全的持久性服务
- WF数据跟踪SqlTrackingService的问题
- 转:WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- Windows Workflow Foundation:向跟踪服务(TrackingService)传递数据
- WF中的跟踪服务(4):使用跟踪配置文件
- 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?
- 在SQL Server2008中使用(数据)更新跟踪功能-Using Change Tracking in SQL Server 2008
- WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- WF中的跟踪服务(4):使用跟踪配置文件
- WF中的跟踪服务(1):Sql跟踪数据库表,视图,存储过程等相关说明
- 完成了WF工作流持久化和对持久化介质数据的加载, 但是仅仅用持久化,不能够保存工作流当前的执行状态,需要跟踪服务支持,怎样使用Tracing 服务呢?
- 练习WF SqlTrackingService时的一点注意事项 及一点感言
- WF中的跟踪服务(4):使用跟踪配置文件
- SparkSQL ThriftServer服务的使用和程序中JDBC的连接
- 让服务不再停止(在Windows Service中使用Timer的技巧)
- 快速认识和使用浏览器跟踪Http服务及Http服务调试工具