1

我有可以在许多执行环境中运行的通用代码——在 IIS 中、在 WCF 服务中、在独立应用程序中或在 Windows 工作流实例中。

但是检查代码是否在工作流中运行的最佳方法是什么?目前,我一直在用这段代码寻找WorkflowEnvironment.WorkflowInstanceID并捕捉任何异常:

...
try
{
  if (WorkflowEnvironment.WorkflowInstanceId != null)
  {
    return ExecutionContext.Workflow;
  }
}
catch
{
}

// return unknown
return ExecutionContext.Unknown;

没有更好的方法吗?我想消除对try...catch块的需要。

4

1 回答 1

0

确实没有更好的方法可以做到这一点。

您可以首先检查的一件事是 System.Diagnostics.Trace.CorrelationManager.ActivityId。如果这等于 Guid.Empty,那么您不在使用 DefaultWorkflowSchedulerService 的工作流中。不幸的是,手动调度程序没有设置这个 ActivityId 所以在这种情况下它没有帮助。

BTW 这个ActivityId 与工作流无关,而是E2E 跟踪activityId,它也被设置为工作流InstanceId。

于 2009-01-18T11:05:31.497 回答