Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Un participant à la persistance peut participer à une opération de persistance (Enregistrer ou charger) déclenchée par un hôte d’application. Le .NET Framework 4.6.1 est fourni avec deux classes abstraites, PersistenceParticipant et PersistenceIOParticipant, que vous pouvez utiliser pour créer un participant de persistance. Un participant de persistance dérive de l’une de ces classes, implémente les méthodes requises, puis ajoute une instance de la classe à la collection WorkflowExtensions sur WorkflowServiceHost. L’hôte d'application peut rechercher des extensions de ce type pour le flux de travail lors de la persistance d’une instance de flux de travail et appeler les méthodes appropriées auprès des participants à la persistance au moment opportun.
La liste suivante décrit les tâches effectuées par le sous-système de persistance dans différentes étapes de l’opération Persist (Enregistrer). Les participants de persistance sont utilisés durant les troisième et quatrième étapes. Si le participant est un participant d’E/S (participant de persistance qui participe également aux opérations d’E/S), le participant est également utilisé dans la sixième étape.
Collecte des valeurs intégrées, notamment l’état du flux de travail, les signets, les variables mappées et l’horodatage.
Rassemble tous les participants de persistance qui ont été ajoutés à la collection d’extensions associée à l’instance de workflow.
Appelle la méthode CollectValues implémentée par tous les participants de persistance.
Appelle la méthode MapValues implémentée par tous les participants de persistance.
Rend le workflow persistant ou l'enregistre dans le magasin de persistances.
Appelle la méthode BeginOnSave sur tous les participants d’E/S de persistance. Si le participant n’est pas un participant d’E/S, cette tâche est ignorée. Si l’épisode de persistance est transactionnel, la transaction est fournie dans la propriété Transaction.Current.
Attend que tous les participants de persistance soient terminés. Si tous les participants réussissent à conserver les données d’instance, valide la transaction.
Un participant de persistance dérive de la classe PersistenceParticipant et peut implémenter les méthodes CollectValues et MapValues . Un participant d’E/S de persistance dérive de la classe PersistenceIOParticipant et peut implémenter la méthode BeginOnSave en plus d’implémenter les méthodes CollectValues et MapValues .
Chaque étape est terminée avant le début de l’étape suivante. Par exemple, les valeurs sont collectées à partir de tous les participants de persistance dans la première phase. Ensuite, toutes les valeurs collectées lors de la première étape sont fournies à tous les participants impliqués dans la persistance lors de la deuxième étape pour le mappage. Ensuite, toutes les valeurs collectées et mappées dans les premières et deuxième phases sont fournies au fournisseur de persistance dans la troisième étape, et ainsi de suite.
La liste suivante décrit les tâches effectuées par le sous-système de persistance dans différentes étapes de l’opération de chargement. Les participants de persistance sont utilisés lors de la quatrième étape. Les participants d’E/S de persistance (les participants de persistance qui participent également aux opérations d’E/S) sont également utilisés lors de la troisième étape.
Rassemble tous les participants de persistance qui ont été ajoutés à la collection d’extensions associée à l’instance de workflow.
Charge le workflow à partir du magasin de persistances.
Appelle la méthode BeginOnLoad sur toute les participants d’E/S de persistance et attend que tous les participants de persistance soient terminés. Si l’épisode de persistance est transactionnel, la transaction est fournie dans Transaction.Current.
Charge l’instance de flux de travail en mémoire en fonction des données récupérées à partir du stockage persistant.
Appelle la méthode PublishValues sur chaque participant de persistance.
Un participant de persistance dérive de la classe PersistenceParticipant et peut implémenter la méthode PublishValues . Un participant d’E/S de persistance dérive de la classe PersistenceIOParticipant et peut implémenter la méthode BeginOnLoad en plus d’implémenter la méthode PublishValues .
Lors du chargement d’une instance de workflow, le fournisseur de persistance crée un verrou sur cette instance. Cela empêche le chargement de l’instance par plusieurs hôtes dans un scénario à plusieurs nœuds. Si vous tentez de charger une instance de flux de travail verrouillée, vous verrez une exception semblable à ce qui suit : L’exception « System.ServiceModel.Persistence.InstanceLockException : L’opération demandée n’a pas pu se terminer, car le verrou de l’instance « 0000000-00000-000000000000000 » n’a pas pu être acquis ». Cette erreur se produit lorsque l’une des opérations suivantes se produit :
Dans un scénario à plusieurs nœuds, l’instance est chargée par un autre hôte. Il existe plusieurs façons de résoudre ces types de conflits : transférer le traitement vers le nœud propriétaire du verrou et réessayer, ou forcer la charge qui entraîne l’impossibilité pour l’autre hôte d’enregistrer son travail.
Dans un scénario à nœud unique et l'hôte est bloqué. Lorsque l'hôte redémarre (un recyclage du processus ou la création d'une nouvelle fabrique de fournisseur de persistance), le nouvel hôte tente de charger une instance qui est toujours verrouillée par l'ancien hôte, car le verrou n'a pas encore expiré.
Dans un scénario à nœud unique et l’instance en question a été abandonnée à un moment donné et une nouvelle instance de fournisseur de persistance est créée avec un ID hôte différent.
La valeur de délai d’expiration du verrouillage a une valeur par défaut de 5 minutes, vous pouvez spécifier une valeur de délai d’attente différente lors de l’appel Load.