Partage via


Gestion des instances suspendues

L’exemple SuspendedInstanceManagement montre comment gérer les instances de workflow qui ont été suspendues. 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 flux de travail suspendue ne peut pas s’exécuter tant qu’elle n’a pas été annulée.

L’exemple montre comment un utilitaire de ligne de commande peut être implémenté pour interroger des instances suspendues et comment donner à l’utilisateur la possibilité de reprendre ou de mettre fin à l’instance. Dans cet exemple, un service de flux de travail lève intentionnellement une exception, ce qui entraîne sa suspension. L’utilitaire de ligne de commande peut ensuite être utilisé pour interroger l’instance, puis reprendre ou arrêter l’instance.

Montre ce qui suit

WorkflowServiceHost avec WorkflowUnhandledExceptionBehavior et WorkflowControlEndpoint dans Windows Workflow Foundation (WF).

Discussions

L’utilitaire de ligne de commande implémenté dans cet exemple est spécifique à l’implémentation du magasin d’instances SQL fournie 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 spécifiques à votre magasin d’instances.

L’implémentation fournie exécute des commandes SQL sur le magasin d’instances SQL directement pour répertorier les instances suspendues, et elle s’appuie sur une WorkflowControlEndpoint ajoutée au WorkflowServiceHost afin de reprendre ou de mettre fin aux instances.

Pour configurer, générer et exécuter l’exemple

  1. Cet exemple nécessite que les composants Windows suivants soient activés :

    1. Serveur du service de files d’attente de messages Microsoft (MSMQ)

    2. SQL Server Express

  2. Configurez la base de données SQL Server.

    1. À partir d’une invite de commandes Visual Studio, exécutez « setup.cmd » à partir de l’exemple de répertoire SuspendedInstanceManagement, qui effectue les opérations suivantes :

      1. 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

      2. Configure la base de données pour la persistance.

      3. 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.

  3. Configurez la file d’attente du service.

    1. Dans Visual Studio, cliquez avec le bouton droit sur le projet SampleWorkflowApp, puis cliquez sur Définir comme projet de démarrage.

    2. Compilez et exécutez SampleWorkflowApp en appuyant sur F5. Cela crée la file d’attente requise.

    3. Appuyez sur Entrée pour arrêter SampleWorkflowApp.

    4. Ouvrez la console Gestion de l’ordinateur en exécutant Compmgmt.msc à partir d’une invite de commandes.

    5. Développez Services et applications, Message Queuing, Files d’attente privées.

    6. Cliquez avec le bouton droit sur la file d’attente ReceiveTx et sélectionnez Propriétés.

    7. Sélectionnez l’onglet Sécurité et autorisez tout le monde à disposer des autorisations nécessaires pour recevoirmessage, affichermessage et envoyer un message.

  4. Exécutez maintenant l’exemple.

    1. Dans Visual Studio, réexécutez le projet SampleWorkflowApp sans débogage en appuyant sur Ctrl+F5. Deux adresses de point de terminaison sont imprimées dans la fenêtre de console : une pour le point de terminaison de l’application, puis une autre à partir du WorkflowControlEndpoint. Une instance de flux de travail est ensuite créée et les enregistrements de suivi de cette instance s’affichent dans la fenêtre de console. L’instance de workflow déclenchera une exception, ce qui entraînera la suspension et l'abandon de l’instance.

    2. L’utilitaire de ligne de commande peut ensuite être utilisé pour prendre des mesures supplémentaires sur l’une de ces instances. La syntaxe des arguments de ligne de commande est la suivante :

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      Les commandes prises en charge sont les suivantes : Query, Resumeet Terminate. Le commutateur InstanceId n’est requis que pour les opérations Resume et Terminate.

Pour nettoyer (facultatif)

  1. Ouvrez la console Gestion des ordinateurs en exécutant Compmgmt.msc.

  2. Développez Services et applications, Message Queuing, Files d’attente privées.

  3. Supprimez la file d’attente ReceiveTx.

  4. Pour supprimer la base de données de persistance, exécutez cleanup.cmd.