WF TrackingService 中4个获取 TrackingProfile 方法的调用时机

本文详细解析了TrackingService中获取TrackingProfile的四种方法及其调用时机,包括创建流程实例时及重新加载钝化流程实例时的不同场景,并强调了自定义TrackingService时需确保不同方法获取的配置文件版本一致性。

TrackingService 中获取 TrackingProfile 的方法有4个,类库帮助文档中对各个方法的调用时机描述的不是很清楚,通过参考相关资料和实际测试,对各个方法的调用时机描述如下:

方法1、protected override bool TryGetProfile(Type workflowType, out TrackingProfile profile)
方法2、protected override bool TryReloadProfile(Type workflowType, Guid workflowInstanceId, out TrackingProfile profile)
方法3、protected override TrackingProfile GetProfile(Guid workflowInstanceId)
方法4、protected override TrackingProfile GetProfile(Type workflowType, Version profileVersionId)

方法1:

      当调用 WorkflowRuntime.CreateWorkflow(...) 方法创建工作流实例时,此方法被调用。按照返回值和输出参数profile的赋值可以分为3种情况:

1、返回值==false
这种情况,表示不启用跟踪。如果工作流在以后的运行过程中,试图调用方法2,会抛出异常。

2、返回值==true,profile为null或无效的跟踪配置文件
这种情况表示启用跟踪,但由于跟踪配置文件设置无效,会直接抛出异常。

3、返回值==true,profile为有效的跟踪配置文件
这种情况表示启用跟踪,且跟踪配置有效。

方法2:

       当调用 WorkflowInstance.ReloadTrackingProfiles() 方法时,此方法被调用。按照返回值和输出参数profile的赋值可以分为4种情况: 

1、返回值==false
这种情况,表示对调用 ReloadTrackingProfiles() 方法的工作流实例没有特定的跟踪配置文件可以应用。

2、返回值==true,profile为null
这种情况表示停止对调用 ReloadTrackingProfiles() 方法的工作流实例的跟踪。

3、返回值==true,profile为无效的跟踪配置文件
这种情况表示对调用 ReloadTrackingProfiles() 方法的工作流实例要应用特定的跟踪配置文件,但由于跟踪配置文件设置无效,会直接抛出异常。

4、返回值==true,profile为有效的跟踪配置文件
这种情况表示对调用 ReloadTrackingProfiles() 方法的工作流实例要应用特定的跟踪配置文件,且跟踪配置有效。

方法3和方法4:

      工作流实例钝化后被重新加载时,如果在缓存中没有找到钝化时相应版本的跟踪配置文件时,此2个方法中的一个将被调用。如果先前调用了 WorkflowInstance.ReloadTrackingProfiles() 方法并且对工作流实例应用了特定的跟踪配置文件,则方法3被调用,否则方法4被调用。

 

      在编写自定义TrackingService时,应该保证通过不同的方法获取的 TrackingProfile 版本的一致性。

 

参考资料:

Writing Tracking Services for Windows Workflow Foundation

Windows Workflow Foundation: Tracking Services Deep Dive

转载于:https://www.cnblogs.com/wfkeypoints/archive/2009/04/07/1430754.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值