跟踪工作流的执行时,提取数据通常很有用。 执行后访问跟踪记录时,这会提供额外的上下文。 在 .NET Framework 4.6.1 中,可以使用跟踪提取工作流中任何活动的作用域内的任何可见变量或参数。 跟踪配置文件简化了对数据的提取。
变量和参数
当活动发出 ActivityStateRecord 时,将提取变量和参数。 仅当变量位于活动范围内时,变量才可用于提取。 以下列方式指定要在活动中提取的变量:
如果通过变量名指定一个变量,跟踪将会在当前活动及其父活动中查找该变量。 在当前活动范围和父范围中搜索变量。
如果要提取的变量是使用 name=“*”指定的,则会提取当前活动中的所有变量。 此种情况下,将不会提取范围中在父活动中定义的变量。
提取参数时,提取的参数取决于活动的状态。 当活动的状态为“正在执行”时,只有 InArguments
可用于提取。 对于任何其他活动状态(Closed、Faulted、Canceled),所有参数(InArguments 和 OutArguments)都可用于提取。
下面的示例演示了一个活动状态查询,该查询在发出活动的 Closed
跟踪记录时提取变量和参数。 变量和自变量只能使用 ActivityStateRecord 来提取,因此使用 ActivityStateQuery 在跟踪配置文件内进行订阅。
<activityStateQuery activityName="SendEmailActivity">
<states>
<state name="Closed"/>
</states>
<variables>
<variable name="FromAddress"/>
</variables>
<arguments>
<argument name="Result"/>
</arguments>
</activityStateQuery>
保护存储在变量和参数中的信息
默认情况下,跟踪的变量或参数由 WF 运行时可见。 工作流开发人员可以通过执行以下步骤来保护它免受访问:
加密变量的值。
控制跟踪配置文件的创建,以防止提取变量或参数。
对于自定义跟踪参与者,请确保 WF 代码不会披露存储在变量或参数中的敏感信息。