Gestion de l'instance interrompue
L’exemple SuspendedInstanceManagement montre comment gérer des instances de workflow qui ont été interrompues. L'action par défaut pour WorkflowUnhandledExceptionBehavior est AbandonAndSuspend
. Cela signifie que, par défaut, les exceptions non gérées levées à partir d'une instance de workflow hébergée dans le WorkflowServiceHost provoqueront la suppression de l'instance de la mémoire (abandon), et la version durable/persistante de l'instance sera marquée comme interrompue. Une instance de workflow interrompue ne sera pas en mesure de fonctionner tant que l'interruption n'a pas été annulée.
L'exemple montre comment un utilitaire en ligne de commande peut être implémenté pour rechercher des instances interrompues et comment permettre à l'utilisateur de reprendre ou de terminer l'instance. Dans cet exemple, un service de workflow lève une exception intentionnellement, ce qui provoque son interruption. L'utilitaire en ligne de command peut ensuite être utilisé pour rechercher l'instance et, par la suite, la reprendre ou la terminer.
Illustre le
WorkflowServiceHost avec WorkflowUnhandledExceptionBehavior et WorkflowControlEndpoint dans Windows Workflow Foundation (WF).
Discussion
L’utilitaire en ligne de commande implémenté dans cet exemple est spécifique de l’implémentation du magasin d’instances SQL fourni dans .NET Framework 4.6.1. Si vous avez une implémentation personnalisée du magasin d'instances, vous pouvez adapter cet utilitaire en remplaçant les implémentations WorkflowInstanceCommand
dans l'exemple par des implémentations qui sont spécifiques à votre magasin d'instances.
L'implémentation fournie exécute directement des commandes SQL dans le magasin d'instances SQL pour répertorier les instances interrompues et s'appuie sur un WorkflowControlEndpoint ajouté au WorkflowServiceHost pour reprendre ou terminer les instances.
Pour configurer, générer et exécuter l'exemple
Cet exemple requiert que les composants Windows suivants soient activés :
Serveur de file d'attente Microsoft Message Queue (MSMQ)
SQL Server Express
Configurez la base de données SQL Server.
À partir d’une invite de commandes Visual Studio, exécutez « setup.cmd » dans le répertoire de l’exemple SuspendedInstanceManagement, qui effectue les opérations suivantes :
Crée une base de données de persistance à l'aide de SQL Server Express. Si la base de données de persistance existe déjà, elle est supprimée et recréée.
Configure la base de données pour la persistance.
Ajoute IIS APPPOOL\DefaultAppPool et NT AUTHORITY\Network Service au rôle InstanceStoreUsers qui a été défini lors de la configuration de la base de données pour la persistance.
Configurez la file d'attente de service.
Dans Visual Studio, cliquez avec le bouton droit sur le projet SampleWorkflowApp et cliquez sur Définir comme projet de démarrage.
Compilez et exécutez SampleWorkflowApp en appuyant sur F5. La file d'attente requise sera ainsi créée.
Appuyez sur Entrée pour arrêter SampleWorkflowApp.
Ouvrez la console Gestion de l'ordinateur en exécutant Compmgmt.msc à partir d'une invite de commandes.
Développez Services et applications, Message Queuing, Files d’attente privées.
Cliquez avec le bouton droit sur la file d’attente ReceiveTx et sélectionnez Propriétés.
Sélectionnez l’onglet Sécurité et permettez à Tout le monde d’avoir des autorisations pour Recevoir un message, Lire le message et Envoyer un message.
Exécutez maintenant l'exemple.
Dans Visual Studio, exécutez à nouveau le projet SampleWorkflowApp sans déboguer en appuyant sur Ctrl+F5. Deux adresses de point de terminaison seront imprimées dans la fenêtre de console : une pour le point de terminaison d'application et l'autre pour le WorkflowControlEndpoint. Une instance de workflow est ensuite créée et les enregistrements de suivi pour cette instance s'afficheront dans la fenêtre de console. L'instance de workflow lèvera une exception qui provoquera l'interruption et l'abandon de l'instance.
L'utilitaire en ligne de commande peut ensuite être utilisé pour entreprendre des actions supplémentaires sur chacune de ces instances. La syntaxe pour les arguments de ligne de commande est la suivante :
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
Les commandes prises en charge sont
Query
,Resume
etTerminate
. Le commutateur InstanceId est uniquement obligatoire pour les opérationsResume
etTerminate
.
Pour effectuer un nettoyage (facultatif)
Ouvrez la console Gestion de l’ordinateur en exécutant Compmgmt.msc.
Développez Services et applications, Message Queuing, Files d’attente privées.
Supprimez la file d’attente ReceiveTx.
Pour supprimer la base de données de persistance, exécutez cleanup.cmd.