Partager via


Création de services de persistance personnalisés

Vous pouvez implémenter un service de persistance pour enregistrer l'état d'exécution d'une instance de workflow dans un magasin fiable et récupérer l'état de ce magasin. À certains points de validation pendant l'exécution d'un workflow, le moteur d'exécution Windows Workflow Foundation notifie le service de persistance pour rendre les informations d'état du workflow persistantes. Par exemple, cela peut se produire lorsque le workflow devient inactif, lorsqu'une activité TransactionScopeActivity finit de s'exécuter ou lorsque l'application hôte appelle la méthode Unload.

Le moteur d'exécution Windows Workflow Foundation ne rend pas lui-même les informations d'état persistantes. Cette fonctionnalité est fournie par les services de persistance personnalisés ajoutés au moteur au moment de l'exécution. Le moteur d'exécution est chargé de démarrer les opérations de persistance, et les services de persistance personnalisés sont chargés d'enregistrer et de charger la date de l'état rendu persistant.

Caution noteAttention :

Si vous créez un workflow qui utilise les activités TransactionScopeActivity, CompensatableTransactionScopeActivity, CompensatableSequenceActivity ou les activités personnalisées qui utilisent l'attribut PersistOnCloseAttribute ou implémentent l'interface ICompensatableActivity, vous devez spécifier un service de persistance à utiliser ou une exception sera levée lorsque vous exécuterez le workflow.

Création d'un service de persistance personnalisé

Vous créez un service de persistance personnalisé en dérivant de la classe de base abstraite WorkflowPersistenceService. Cette classe de base contient cinq méthodes abstraites que vous devez substituer lorsque vous créez votre service de persistance. Ces méthodes sont présentées dans le tableau suivant.

Méthode Description

LoadCompletedContextActivity

Recharge l'étendue terminée spécifiée dans la mémoire.

LoadWorkflowInstanceState

Recharge l'état spécifié de l'instance de workflow dans la mémoire.

SaveCompletedContextActivity

Enregistre l'étendue terminée spécifiée dans un magasin de données.

SaveWorkflowInstanceState

Enregistre l'état de l'instance du workflow dans un magasin de données.

UnlockWorkflowInstanceState

Déverrouille l'état de l'instance de workflow spécifiée.

UnloadOnIdle

Détermine s'il faut rendre l'instance de workflow spécifiée persistante au stockage lorsqu'elle devient inactive pendant un certain temps.

Pour obtenir un exemple présentant le déchargement d'un workflow du moteur Windows Workflow Foundation en enregistrant l'état de l'instance du workflow à l'aide d'un service de persistance personnalisé, consultez Custom Persistence Service.

Verrouillage des informations d'état du workflow

Le moteur d'exécution Windows Workflow Foundation peut verrouiller des informations d'état du workflow pour empêcher le chargement d'un workflow unique par des services de persistance distincts qui s'exécutent dans plusieurs processus. Toutefois, le mécanisme de verrouillage réel est implémenté par le service de persistance personnalisé lui-même. Cela signifie que la prise en charge est facultative lorsque vous créez votre service de persistance. Si vous choisissez de prendre en charge le verrouillage d'état du workflow, vous devez verrouiller l'accès à l'état du workflow lorsque le paramètre de déverrouillage porte la valeur false, lorsque SaveWorkflowInstanceState est appelé et lorsque LoadWorkflowInstanceState est appelé. Les informations d'état du workflow doivent rester verrouillées jusqu'à ce que le paramètre de déverrouillage porte la valeur true avec un appel ultérieur à SaveWorkflowInstanceState ou que la méthode UnlockWorkflowInstanceState soit appelée. Vous devez lever un WorkflowOwnershipException si un processus essaie de charger l'état d'instance du workflow qui est à l'état verrouillé.

Rendre les informations d'état du workflow persistantes à l'aide de transactions

Si votre service de persistance personnalisé utilise un magasin fiable, vous devez utiliser le traitement par lots de la transaction du workflow pour différer l'écriture des informations d'état du workflow jusqu'à ce qu'un point de la validation du workflow soit atteint. Pour ce faire, implémentez l'interface IPendingWork de votre classe de service de persistence personnalisée et ajoutez un élément de travail représentant les modifications en cours de votre magasin fiable dans la propriété WorkBatch.

Voir aussi

Référence

WorkflowPersistenceService

Concepts

Vue d'ensemble de la persistance
Services de persistance Windows Workflow

Autres ressources

Custom Persistence Service
Using Persistence Services
Développement de services Windows Workflow Foundation

Footer image

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