2009-01-15 6 views
1

J'ai un code commun qui peut s'exécuter dans un certain nombre d'environnements d'exécution - dans IIS, dans un service WCF, dans une application autonome ou dans une instance Windows Workflow.Quel est le meilleur moyen de savoir si le code est en cours d'exécution dans un flux de travail?

Mais quelle est la meilleure façon de vérifier si le code s'exécute dans un flux de travail? Pour le moment, je suis à la recherche de WorkflowEnvironment.WorkflowInstanceID et attraper des exceptions avec ce code:

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

// return unknown 
return ExecutionContext.Unknown; 

N'y at-il une meilleure façon? Je veux supprimer le besoin d'un bloc try...catch.

Répondre

0

Il n'y a vraiment pas de meilleure façon de le faire.

Une chose que vous pouvez vérifier en premier est System.Diagnostics.Trace.CorrelationManager.ActivityId. Si cela est égal à Guid.Empty, vous n'êtes pas dans un flux de travail utilisant DefaultWorkflowSchedulerService. Malheureusement, le planificateur manuel ne définit pas cette ActivityId, dans ce cas, cela n'aide pas.

BTW Cet ActivityId n'a rien à voir avec le flux de travail, mais il s'agit de l'ID d'activité de suivi E2E qui est également défini sur le flux de travail InstanceId.

Questions connexes