Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsqu’une nouvelle instance d’un flux de travail est créée qui conserve son état dans le SqlWorkflowInstanceStoremagasin d’instances, l’hôte de service crée une entrée pour ce service dans le magasin d’instances. Par la suite, lorsque l'instance de workflow est rendue persistante pour la première fois, le SqlWorkflowInstanceStore stocke l'état de l'instance actuelle. Si le flux de travail est hébergé dans le service d’activation des processus Windows, les données de déploiement de service sont également écrites dans le magasin d’instances lorsque l’instance est conservée pour la première fois.
Tant que l’instance de workflow n’a pas été conservée, elle est dans un état non persistant . Dans cet état, l’instance de workflow ne peut pas être récupérée après une recyclage du domaine d’application, une défaillance de l’hôte ou une défaillance de l’ordinateur.
État non persistant
Les instances de flux de travail durables qui n’ont pas été conservées restent dans un état non persistant dans les cas suivants :
L'hôte de service se bloque avant que l'instance de workflow soit persistante pour la première fois. L'instance de workflow reste dans le magasin d'instances et n'est pas récupérée. Si un message corrélé arrive, l’instance de flux de travail redevient active.
L'instance de workflow rencontre une exception avant qu'elle soit rendue persistante pour la première fois. En fonction de UnhandledExceptionAction retourné, les scénarios suivants se produisent :
UnhandledExceptionAction est défini sur Abort: lorsqu’une exception se produit, les informations de déploiement de service sont écrites dans le magasin d’instances et l’instance de workflow est déchargée de la mémoire. L’instance de flux de travail reste dans un état non persistant et ne peut pas être rechargée.
UnhandledExceptionAction est défini sur Cancel ou Terminate: lorsqu'une exception se produit, les informations de déploiement de service sont écrites dans le magasin d’instances et l’état de l’instance d’activité est défini sur Closed.
Pour réduire le risque de rencontrer des instances de workflow non persistantes déchargées, il est recommandé de rendre le workflow persistant tôt dans son cycle de vie.
Détection et suppression d’instances non persistantes
SqlWorkflowInstanceStore ne supprime pas les instances de workflow non persistantes dans le magasin d'instances. Il ne supprime pas non plus les propriétaires des verrous arrivés à expiration auxquels des instances de workflow non persistantes sont associées.
Nous vous recommandons que l’administrateur vérifie régulièrement le magasin d’instances pour les instances non persistantes. Les administrateurs peuvent supprimer ces instances du magasin d’instances tant qu’ils savent que ce flux de travail ne recevra pas de messages corrélés. Par exemple, si l’instance a été dans la base de données depuis plusieurs mois et qu’il est connu que le flux de travail a généralement une durée de vie de plusieurs jours, il serait sûr de supposer qu’il s’agissait d’une instance initialisée qui avait bloqué.
Pour rechercher des instances non persistantes dans le magasin d’instances de workflow SQL, vous pouvez utiliser les requêtes SQL suivantes :
Cette requête trouve toutes les instances qui n'ont pas été persistées et retourne l'ID ainsi que l'heure de création (enregistrée en temps UTC) pour celles-ci.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0Cette requête recherche toutes les instances qui n’ont pas été conservées et qui ne sont pas chargées, et retourne l’ID et l’heure de création (stockées au moment UTC) pour celles-ci.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULLCette requête recherche toutes les instances suspendues qui n’ont pas été conservées et retourne l’ID, l’heure de création (stockée dans l’heure UTC), la raison de suspension et le nom de l’exception pour eux.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1
Faites attention lorsque vous supprimez des instances non persistantes. En général, il est sûr de supprimer les instances non persistantes créées par WorkflowServiceHost qui sont suspendues ou ne sont pas chargées. Ces instances spécifiques peuvent être supprimées du magasin en les supprimant de l'affichage [System.Activities.DurableInstancing].[Instances] à l'aide de la commande SQL suivante, en remplaçant l'ID d'instance correct.
delete [System.Activities.DurableInstancing].[Instances]
where InstanceId=’078a9bc4-ada5-4f9e-8cce-b0eb0009995f’
Avertissement
Nous vous déconseillons de supprimer toutes les instances non persistantes, car cela inclut des instances qui viennent d’être créées et qui n’ont pas encore été conservées.