Partager via


Services de persistance Windows Workflow

De nombreux processus d'entreprise nécessitent des délais importants pour leur accomplissement (parfois plusieurs mois, voire plusieurs années). Conserver le workflow en mémoire est non seulement irréaliste (en raison des limitations de mémoire), mais empêche également toute évolutivité car une instance doit être traitée sur un serveur unique. Un grand nombre de ces workflows de longue durée n'exécutent pas de flux ou de processus logique de manière active et sont en fait inactifs, en attente de réponse d'un utilisateur ou d'autres systèmes. En déchargeant une instance inactive, l'application hôte peut économiser de la mémoire et permettre une montée en charge des serveurs de traitement.

Lorsque certaines conditions se présentent pendant l'exécution d'un workflow, le moteur d'exécution de workflow utilise un service de persistance, si le runtime en dispose, pour rendre des informations d'état persistantes concernant l'instance de workflow. Ces conditions incluent des éléments comme suit :

Si l'une de ces conditions est rencontrée et qu'un service de persistance est ajouté au moteur d'exécution, ce dernier appelle des méthodes fournies par le service de persistance pour enregistrer des informations d'état à propos de l'instance de workflow. De même, lorsque le moteur d'exécution de workflow doit restaurer une instance de workflow rendue persistante auparavant, il appelle les méthodes fournies par le service de persistance pour charger ces informations d'état. En d'autres termes, le moteur d'exécution de workflow détermine quand la persistance doit avoir lieu, mais c'est à un service de persistance d'effectuer les opérations de persistance nécessaires.

Les informations sur le minuteur constituent un autre élément de l'état du workflow géré par le SqlWorkflowPersistenceService. À chaque fois que vous configurez une activité DelayActivity au sein de votre définition de workflow et que vous utilisez un service de persistance comme le SqlWorkflowPersistenceService, les informations sur l'intervalle de temps associées à l'activité sont rendues persistantes dans le cadre de l'état du workflow. À chaque fois que l'instance de workflow est évaluée par l'exécution du workflow les événements du minuteur en attente sont traités.

Création de services de persistance

Vous pouvez créer un service de persistance en dérivant une classe de WorkflowPersistenceService. Vous pouvez ajouter un service de persistance au moteur d'exécution de workflow en appelant la méthode AddService ou en effectuant une entrée appropriée dans le fichier de configuration de l'application. Windows Workflow Foundation fournit la classe SqlWorkflowPersistenceService, un service de persistance prédéfini, que vous pouvez utiliser tel quel ou développer. Pour plus d'informations sur la création d'un service de persistance personnalisé, consultez Création de services de persistance personnalisés. Pour plus d'informations sur l'utilisation de la classe SqlWorkflowPersistenceService, consultez Utilisation de SqlWorkflowPersistenceService.

Note Remarque :

.La classe WorkflowRuntime doit contenir un seul service de persistance.

Verrouillage des informations d'état du workflow

Le moteur d'exécution de workflow dispose d'une sémantique qui permet de verrouiller les informations d'état du workflow à utiliser dans les environnements où les services de persistance qui s'exécutent dans des processus différents susceptibles d'avoir accès à un magasin de données unique. La classe WorkflowPersistenceService vous permet de prendre en charge ces fonctionnalités du moteur d'exécution de workflow en fournissant un paramètre à SaveWorkflowInstanceState qui spécifie si les informations d'état d'une instance de workflow doivent être déverrouillées dans le magasin de données et en fournissant la méthode UnlockWorkflowInstanceState pour déverrouiller les informations d'état du workflow verrouillées précédemment. Dans un service de persistance qui implémente le verrouillage, un appel à la méthode LoadWorkflowInstanceState doit pouvoir verrouiller les informations d'état d'une instance de workflow.

Lorsque vous créez votre propre service de persistance, levez une PersistenceException si le service n'enregistre pas les informations d'état dans son magasin de données ou ne charge pas les informations d'état depuis son magasin de données. Le moteur d'exécution de workflow prévoit ce comportement.

Comportement du traitement par lots du service de persistance

Un mécanisme de traitement par lots est fourni pour les services qui utilisent un magasin fiable pour enregistrer les informations d'état du workflow. Dans ces situations, il est souvent important de maintenir la cohérence entre le magasin fiable utilisé par le service de persistance et l'état interne du moteur d'exécution de workflow. Vous pouvez ajouter des fonctionnalités définies par l'interface IPendingWork à votre service, puis participer au traitement par lots de la transaction de workflow fournie par le service WorkflowCommitWorkBatchService en ajoutant des modifications à votre magasin de données en tant qu'éléments de travail de la propriété WorkBatch. Pour plus d'informations, consultez SaveCompletedContextActivity ou SaveWorkflowInstanceState.

Scénarios d'hébergement complexes

Un scénario permettant de déployer des solutions Windows Workflow Foundation consiste à créer plusieurs applications hôtes, chacune dotée d'un jeu de services distinct qui s'exécute sur différentes configurations de Bureau et de serveur. Dans un tel scénario, il peut être nécessaire de définir que certains workflows dans la solution puissent uniquement s'exécuter sur certains systèmes. Les services prédéfinis de Windows Workflow Foundation, tels que le service SqlWorkflowPersistenceService, ne prennent pas en charge ce type de configuration. Contrôler quelles instances de workflow se chargent sur quels systèmes, vous devez créer un service de persistance personnalisé. Pour plus d'informations, consultez Création de services de persistance personnalisés.

Voir aussi

Référence

SqlWorkflowPersistenceService
SqlPersistenceWorkflowInstanceDescription
WorkflowPersistenceService
WorkBatch

Concepts

Utilisation de SqlWorkflowPersistenceService
Création de services de persistance personnalisés

Autres ressources

Services Windows Workflow Foundation
Exercice 4 : utiliser des services d'exécution
Using Persistence Services

Footer image

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