在TrackingParticipant中获取ServiceDeploymentId

时间:2011-07-15 20:03:40

标签: persistence workflow-foundation-4 tracking

在WF4中,我创建了TrackingParticipant的后代。在Track方法中,record.InstanceId为我提供了工作流实例的GUID。

我正在使用SqlWorkflowInstanceStore进行持久化。默认情况下,工作流完成时会自动从InstancesTable中删除记录。我希望保持这种方式使事务数据库变小。

但这会给报告带来问题。我的TrackingParticipant会将实例ID记录到报告表中(以及其他跟踪信息),但我想加入ServiceDeploymentsTable。如果工作流程已完成,那个GUID将不在InstancesTable中,因此我将无法查找ServiceDeploymentId。

如何在TrackingParticipant中获取ServiceDeploymentId?或者,如何在工作流程中获取它以将其添加到CustomTrackingRecord?

1 个答案:

答案 0 :(得分:1)

您无法在TrackingParticipant中获取ServiceDeploymentId。基本上,ServiceDeploymentId是SqlWorkflowInstanceStore的内部细节。

我要么将SqlWorkflowInstanceStore设置为在完成后不删除worklow实例,并在使用InstanceId保存ServiceDeploymentId之后的某个时间点自己执行此操作。

另一种方法是在SqlWorkflowInstanceStore中使用自动清理,并在生成第一个跟踪记录时检索ServiceDeploymentId。此时工作流程未完成,因此原始实例记录仍然存在。