Каков наилучший способ узнать, выполняется ли код в рабочем процессе? - PullRequest
1 голос
/ 15 января 2009

У меня есть общий код, который может выполняться в ряде сред выполнения - в IIS, в службе WCF, в автономном приложении или в экземпляре рабочего процесса Windows.

Но как лучше всего проверить, выполняется ли код внутри рабочего процесса? На данный момент я искал WorkflowEnvironment.WorkflowInstanceID и ловил любые исключения с этим кодом:

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

// return unknown
return ExecutionContext.Unknown;

Нет лучшего способа? Я хочу устранить необходимость в блоке try...catch.

1 Ответ

0 голосов
/ 18 января 2009

Нет лучшего способа сделать это.

Первое, что вы можете проверить - это System.Diagnostics.Trace.CorrelationManager.ActivityId. Если это равно Guid.Empty, то вы не находитесь внутри рабочего процесса, использующего DefaultWorkflowSchedulerService. К сожалению, ручной планировщик не устанавливает этот ActivityId, поэтому в этом случае он не помогает.

Кстати, этот ActivityId не имеет ничего общего с рабочим процессом, но является идентификатором активности трассировки E2E, который также имеет значение InstanceId рабочего процесса.

...