WF TrackingService 中4个获取 TrackingProfile 方法的调用时机
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 版本的一致性。
参考资料: