Partager via


Création de services WorkflowCommitWorkBatchService personnalisés

L'exécution du workflow utilise un service WorkflowCommitWorkBatchService à chaque fois qu'il doit valider les résultats d'une exécution de workflow. Vous pouvez fournir un service WorkflowCommitWorkBatchService personnalisé pour contrôler l'exécution de la logique de validation, en fournissant par exemple un contexte transactionnel. Si aucun WorkflowCommitWorkBatchService n'est spécifié, l'exécution du workflow crée un DefaultWorkflowCommitWorkBatchService lorsque le runtime est démarré.

Pour créer un service WorkflowCommitWorkBatchService personnalisé, vous devez dériver de la classe de base WorkflowCommitWorkBatchService. Cette classe définit une méthode virtuelle, que vous pouvez substituer :

protected void CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)

Cette méthode est appelée par l'exécution de workflow lorsqu'elle a un travail en traitement par lots à valider, par exemple, lorsqu'elle doit rendre persistantes des modifications apportées à une instance de workflow. L'implémentation de cette méthode doit appeler la méthode CommitWorkBatchCallback dans une étendue transactionnelle appropriée.

Transactions ambiantes

L'implémentation de base vérifie si une transaction ambiante provenant de l'instance de workflow existe. Si elle ne trouve pas de transaction ambiante, elle en crée une et appelle le délégué CommitWorkBatch. Toutefois, si une transaction ambiante existe, l'implémentation de base crée une DependentTransaction qui spécifie BlockCommitUntilComplete à partir de l'énumération DependentCloneOption, puis affecte à la transaction ambiante la valeur de la DependentTransaction créée récemment. Ceci permet que la transaction ambiante générée par l'instance de workflow ne puisse pas être effectuée tant que le travail de validation du travail en traitement par lots n'est pas réalisé. Si une exception se produit, le service CommitWorkBatch restaure la transaction et lève à nouveau l'exception. Vous pouvez utiliser le FaultHandlerActivity pour intercepter cette exception. Cela vous permet de réessayer la transaction autant que de besoin.

Le seul type de transaction ambiante pris en charge par le WorkflowCommitWorkBatchService est une transaction qui provient de l'instance de workflow. Les transactions ambiantes qui proviennent de l'application hôte ou de l'application qui effectue l'exécution de workflow sont supprimées temporairement du thread actuel pour réduire leurs effets secondaires. Une fois le workflow inactif, la transaction ambiante d'origine contenue dans l'hôte est réinsérée dans le thread. Par conséquent, Windows Workflow Foundation ne prend pas en charge la capacité d'importer des transactions extérieures dans une instance de workflow.

Voir aussi

Référence

DefaultWorkflowCommitWorkBatchService
WorkflowCommitWorkBatchService

Concepts

Services CommitWorkBatch Windows Workflow

Autres ressources

Développement de services Windows Workflow Foundation

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.