Partage via


Service de gestion du flux de travail

Le service de gestion du flux de travail (WMS, Workflow Management Service) est un service Windows qui fournit les services de gestion suivants pour les instances de service de flux de travail :

  • Activation des instances de service de flux de travail. Le service WMS active les instances de service de flux de travail dans un magasin d'instances une fois que celles-ci sont devenues activables. Une instance de service de flux de travail dans un magasin d'instances est considérée comme activable dès lors qu'elle devient exécutable et qu'un hôte de service correspondant à l'instance n'est pas exécuté sur l'ordinateur local. Une instance devient exécutable pour les raisons suivantes :

    • L'instance est déchargée et rendue persistante pendant l'attente d'exécution d'une activité de délai et une fois l'activité de délai exécutée.

    • L'hôte de service est arrêté pendant le chargement de l'instance.

    • Un verrouillage expiré est appliqué à l'instance.

  • Exécution des commandes de contrôle de l'utilisateur. Un fournisseur de contrôle des instances pour un magasin d'instances ajoute les commandes qu'il reçoit des cmdlets de contrôle des instances Windows PowerShell à une file d'attente dans le magasin d'instances. Cette file d'attente est créée et gérée par le fournisseur de contrôle des instances. Le service WMS extrait les commandes de la file d'attente, les exécute, puis les supprime de la file d'attente si l'exécution de la commande a réussi.

Les autres sections de cette rubrique décrivent ces services de façon détaillée. Pour plus d'informations sur l'installation et la configuration du service WMS, consultez la rubrique Installation et configuration du service de gestion du flux de travail.

Activation des instances de service de flux de travail

Par défaut, le service WMS découvre automatiquement les magasins d'instances qu'il doit surveiller pour rechercher les instances de flux de travail activables. Pour ce faire, il analyse les fichiers Web.config aux niveaux racine, du site et de l'application lors du démarrage du service et en cas de modification d'un des fichiers de configuration. Vous pouvez également spécifier des magasins d'instances particuliers que le service WMS doit surveiller, plutôt que de laisser celui-ci les découvrir automatiquement.

Le service WMS crée un objet InstanceStore et s'abonne à l'événement HasActivatableWorkflowEvent pour chaque magasin d'instances découvert. Un magasin d'instances génère l'événement HasActivatableWorkflowEvent lorsqu'il détecte une instance de flux de travail activable dans le magasin. Le magasin d'instances cesse ensuite la surveillance jusqu'à l'appel de la commande QueryActivatableWorkflowsCommand sur le magasin.

Lorsque le service WMS reçoit l'événement HasActivatableWorkflowEvent, il exécute la commande QueryActivatableWorkflowsCommand sur le magasin d'instances pour obtenir les paramètres d'activation qu'il utilise pour créer un hôte de flux de travail.

Le service WMS appelle ensuite le service de gestion des services pris en charge par l'application contenant le service dont l'instance doit être activée et lui transmet les paramètres d'activation. AppFabric ajoute automatiquement le service de gestion des services (service WCF) à toutes les applications pour lesquelles le paramètre serviceManagement est activé. Le service de gestion des services expose un point de terminaison d'activation des services, auquel le service WMS accède via l'adresse qu'il crée à partir du nom du site, du chemin d'accès virtuel à l'application et de l'adresse du point de terminaison d'activation des services connu. Le service WMS utilise la liaison net.pipe pour ce point de terminaison. Pour plus d'informations sur ce service, consultez la rubrique Service de gestion des services.

Le service de gestion des services active un hôte de service de flux de travail à l'aide des paramètres d'activation qu'il reçoit du service WMS. L'hôte de service crée un magasin d'instances (tel que le magasin d'instances de flux de travail SQL) et appelle une méthode sur le magasin pour charger l'instance de service de flux de travail du magasin d'instances vers la mémoire.

Service de gestion du flux de travail - Activation d'instance

Avertissement

Le service WMS récupère instantanément toute modification apportée aux comportements du magasin d'instances de flux de travail SQL et aux définitions de magasin d'instances correspondantes dans les fichiers de configuration, puis lance la surveillance de ces magasins. Toutefois, une application continuera à utiliser le magasin d'instances spécifié dans le comportement du magasin d'instances de flux de travail SQL dans l'ancienne version du fichier de configuration jusqu'à ce que le domaine de l'application soit recyclé, à savoir après l'expiration du délai spécifié par l'attribut delayNotificationTimeout de l'élément httpRuntime. Par exemple, si delayNotificationTimeout est défini sur 5 000 (<httpRuntime delayNotificationTimeout = "5000" />), le domaine de l'application n'est pas recyclé pendant 5 000 secondes.

Avertissement

Si vous désactivez des applications ou des pools d'applications contenant au minimum 1 000 services, le service WMS risque de ne plus activer les instances de service activables. La solution consiste à interrompre les instances des services qui appartiennent à ces applications/pools d'applications avant la désactivation de ceux-ci.

Exécution des commandes de contrôle de l'utilisateur

Lorsque vous émettez une commande sur une instance de service de flux de travail à l'aide d'une cmdlet Windows PowerShell, un fournisseur de contrôle des instances ajoute la commande à une file d'attente de commandes dans le magasin d'instances utilisé par le service. La file d'attente est gérée par le fournisseur de contrôle des instances.

Le service WMS découvre automatiquement les magasins d'instances à surveiller pour rechercher les commandes. Pour ce faire, il analyse les fichiers Web.config aux niveaux racine, du site et de l'application lors du démarrage et en cas de modification d'un des fichiers de configuration. Le service WMS crée un fournisseur de contrôle des instances pour chaque magasin d'instances découvert et interroge le fournisseur pour rechercher régulièrement des commandes. En particulier, le service WMS appelle la méthode BeginTryReceive sur un fournisseur de contrôle des instances pour recevoir les commandes.

Le fournisseur de contrôle des instances récupère à son tour une commande qu'il ne supprime pas de la file d'attente de commandes dans le magasin d'instances et renvoie au service WMS. Le fournisseur applique un verrouillage avec un délai d'expiration réduit à la commande dans la file d'attente.

Le service WMS appelle ensuite une méthode appropriée du point de terminaison de contrôle des instances exposé par l'hôte de service de flux de travail pour exécuter la commande sur l'instance de service de flux de travail cible. Le service WMS requiert l'activation d'une liaison net.pipe par le point de terminaison de contrôle des instances et l'activation de la sécurité du transport. Il crée une adresse de point de terminaison en combinant le nom du site, le chemin d'accès virtuel au service et le chemin d'accès au point de terminaison de contrôle des instances connu. Le fournisseur de contrôle des instances fournit le nom du site et les informations relatives au chemin d'accès virtuel au service. La liaison du point de terminaison de contrôle des instances est codée en dur dans la liaison net.pipe.

Si l'exécution de la commande réussit, le service WMS appelle la méthode Complete sur le fournisseur de contrôle des instances, et le fournisseur supprime la commande de la file d'attente de commandes. Si l'exécution de la commande échoue, le service WMS appelle la méthode Abandon sur le fournisseur de contrôle des instances en relation avec l'échec. Il revient au fournisseur de décider si la commande doit être supprimée de la file d'attente ou conservée pour effectuer de nouvelles tentatives. Le fournisseur de contrôle des instances pour le magasin d'instances de flux de travail SQL effectue cinq tentatives d'exécution d'une commande avant de supprimer celle-ci de la file d'attente. Si un blocage du service WMS survient lors de l'exécution d'une commande, le verrouillage finit par expirer et la commande peut être sélectionnée par la même instance ou une autre instance du service WMS ultérieurement.

Service de gestion du flux de travail - Exécution de commande

Si le service MSDTC (Microsoft Distributed Transaction Coordinator) est activé et autorise les communications entrantes et sortantes, les commandes de contrôle des instances sont exécutées de façon transactionnelle. Par exemple, si vous interrompez une instance de service de flux de travail, l'état est affiché dans le Gestionnaire des services Internet ou renvoyé à partir de la cmdlet comme étant Interrompu immédiatement après l'exécution de la commande. Toutefois, si le service MSDTC est désactivé ou incorrectement configuré, les commandes de contrôle des instances sont exécutées de façon non transactionnelle. Dans le cas, l'état de l'instance n'est pas mis à jour sur Interrompue tant que l'instance n'a pas été déchargée et rendue persistante dans le magasin d'instances car elle a été inactive pendant une durée supérieure au délai spécifié (paramètre Décharger les instances si inactives). Si vous mettez à jour les paramètres MSDTC, vous devrez redémarrer le service WMS afin qu'il récupère ceux-ci.

Conseil

Si vous remarquez qu'une ou plusieurs commandes de contrôle des instances sont en attente pendant une durée prolongée, vous devez vérifier si le service WMS est exécuté sur chaque serveur de la batterie. Si l'instance est en cours d'exécution sur un serveur spécifique (conformément aux informations de surveillance) et qu'une commande de contrôle émise pour cette instance n'est pas exécutée, vous devez vérifier que le service WMS est en cours d'exécution sur le serveur.

Avertissement

Le service de gestion du flux de travail utilise des commandes traitées si les paramètres DTC « Autoriser les transactions entrantes » et « Autoriser les transactions sortantes » sont activés. Si vous désactivez DTC, veillez à également désactiver explicitement ces paramètres de façon à utiliser des commandes non transactionnelles.

Prise en charge des environnements de batterie de serveurs

Chaque nœud d'une batterie de serveurs exécute généralement une instance du service WMS. Une instance du service WMS peut surveiller plusieurs magasins d'instances. Un nœud peut exécuter plusieurs instances du service WMS sous différentes identités Windows. Il est recommandé d'exécuter une seule instance du service WMS pour un magasin d'instances sur un nœud. Dans le cas contraire, vous risquez de rencontrer des problèmes d'évolutivité.

Une instance exécutée sur un nœud plus tôt peut être sélectionnée par le service WMS sur un autre nœud et activée sur ce nœud. Ceci permet d'équilibrer la charge du service WMS entre les serveurs de la batterie.

Lorsque vous émettez une commande de contrôle pour une instance de flux de travail, cette dernière peut être exécutée ou non au sein de la batterie. Le service WMS remet la commande à l'ordinateur exécutant le flux de travail ou indique à l'ordinateur local de charger le flux de travail et d'exécuter la commande. Ceci vous permet d'émettre des commandes vers des instances sans connaître l'ordinateur sur lequel l'instance est exécutée.

Fonctionnalités dépendantes

Les aspects suivants s'appliquent au service WMS :

  • Le service WMS active et exécute des commandes sur des instances de services de flux de travail hébergés à l'aide de l'hôte WorkflowServiceHost dans l'environnement IIS/WAS uniquement. Le service WMS ne prend pas en charge les services de flux de travail hébergés à l'aide d'un autre hôte ou dans un autre environnement d'hébergement.

  • Le service WMS active les instances des services de flux de travail qui utilisent un magasin d'instances pour une persistance d'état durable.

  • Le service WMS active les instances des services de flux de travail qui appartiennent à une application fournissant le service de gestion des services. Le service WMS utilise le service de gestion des services pour activer un hôte de service, qui à son tour charge une instance à partir du magasin d'instances.

  • Le service WMS requiert l'ajout de la liaison net.pipe au site et l'activation du protocole net.pipe sur l'application contenant le service. Le service WMS consigne une erreur dans le journal des événements si le protocole net.pipe n'est pas activé sur l'application.

  • Le service WMS requiert l'exposition par l'instance de service de flux de travail d'un point de terminaison de contrôle des instances. Il utilise le point de terminaison pour émettre des commandes telles que Interrompre et Reprendre vers les instances de service de flux de travail.

  • Le service WMS est compatible avec les magasins d'instances inclus avec un fournisseur de magasin d'instances et un fournisseur de contrôle des instances.

  • Il requiert la génération d'un événement HasActivatableWorkflowsEvent par un magasin d'instances lorsqu'une instance devient activable.

Notes

Pour obtenir des informations de sécurité sur le service WMS, consultez la rubrique Configuration de la sécurité pour les magasins de persistance.

Sécurité

Le service WMS doit se connecter au point de terminaison de contrôle des instances exposé par un hôte de service de flux de travail pour contrôler les instances du service de flux de travail et au point de terminaison de gestion des services exposé par une application Web pour démarrer un hôte de service de flux de travail, puis charger les instances de service de flux de travail. Le groupe AS_Administrators a accès à ces deux points de terminaison. L'identificateur de sécurité (SID) du service de gestion du flux de travail d'AppFabric est membre de ce groupe. Vous n'avez donc pas besoin d'ajouter le compte sous lequel le service WMS est exécuté au groupe AS_Administrators de façon explicite.

La liste suivante inclut des recommandations pour la sécurisation des magasins d'instances et des fichiers de configuration utilisés par le service WMS :

  • Le service WMS lit les informations de configuration, notamment les chaînes de connexion des fichiers de configuration en mémoire. Dans la mesure où il ne traite pas les chaînes de connexion chiffrées simultanément, celles-ci doivent être au format texte simple. Un utilisateur malveillant peut accéder aux informations sensibles (telles que les noms d'utilisateur et les mots de passe d'une chaîne de connexion) figurant dans la mémoire. Vous ne devez donc spécifier aucune information sensible dans une chaîne de connexion définie dans un fichier de configuration.

    Il est recommandé d'utiliser l'authentification Windows intégrée pour les chaînes de connexion stockées dans les fichiers Web.config. Si vous ne pouvez pas utiliser l'authentification intégrée de Windows et que vous spécifiez un nom d'utilisateur et un mot de passe dans une chaîne de connexion définie dans un fichier Web.config, définissez les listes de contrôle d'accès appropriées dans les fichiers de configuration. Veillez à octroyer au groupe AS_Administrators l'accès aux fichiers Web.config auxquels le service WMS a besoin d'accéder. Toutefois, il est important de noter que le fait de définir des listes de contrôle d'accès n'empêche pas un utilisateur malveillant d'accéder aux informations des chaînes de connexion en mémoire.

  • Activez la communication SQL chiffrée en ajoutant « ;Encrypt=yes » à la chaîne de connexion SQL. Si vous utilisez la classe SqlConnectionStringBuilder pour créer une chaîne de connexion, définissez la propriété Encrypt sur true. Pour plus d'informations sur l'activation de la communication chiffrée au niveau du serveur, consultez la page https://go.microsoft.com/fwlink/?LinkID=187283. Si les communications entre votre application et SQL Server ne sont pas sécurisées, un utilisateur malveillant peut manipuler ou exécuter des commandes sur la base de données SQL Server.

  • Les files d'attente de commandes ne conservent pas d'informations d'identification. Les utilisateurs membres du groupe AS_Administrators (mappé au rôle SQL WorkflowAdministrators) peuvent contrôler toutes les instances du magasin d'instances mais pas des types d'instances spécifiques. Par conséquent, les instances qui ne doivent pas être contrôlées par différents utilisateurs doivent être stockées dans différents magasins d'instances. Le rôle SQL WorkflowAdministrators pour ces magasins d'instances doit être mappé aux différents groupes Windows.

  • À chaque modification d'un fichier Web.config, le service WMS lit le fichier et vérifie que les définitions de magasin ont été ajoutées ou supprimées du fichier. Pour empêcher le lancement du traitement des fichiers du service WMS par des utilisateurs non autorisés, il est recommandé de limiter l'accès en écriture aux fichiers Web.config.

  • En fonction du niveau de suivi, la fonctionnalité de surveillance d'AppFabric collecte les données à des taux élevés. Il est recommandé de ne pas placer les magasins de surveillance et de persistance dans la même base de données. Ainsi, les débordements éventuels du magasin de surveillance n'affectent pas le sous-système de persistance.

Le tableau suivant décrit les rôles SQL qui permettent de sécuriser l'accès à la file d'attente de commandes et à la base de données de persistance. Ce contenu ne s'applique qu'au magasin d'instances de flux de travail SQL.

Rôle SQL Description Groupe Windows

WorkflowAdministrators

Les membres de ce rôle peuvent placer des commandes (ajout de commandes) dans la file d'attente de commandes, qui fait partie de la base de données de persistance. Les utilisateurs qui souhaitent contrôler des instances (par exemple, à l'aide de cmdlets Windows PowerShell) doivent être membres de ce rôle.

AS_Administrators

WorkflowManagementServiceUsers

Les membres de ce rôle peuvent enlever des commandes (récupération de commandes) de la file d'attente de commandes. Le compte sous lequel est exécuté le service WMS doit être membre de ce rôle pour permettre au service WMS de récupérer des commandes stockées dans la file d'attente de commandes.

AS_Administrators

WorkflowActivationUsers

Les membres de ce rôle peuvent activer les instances de service de flux de travail rendues persistantes dans la base de données de persistance et prêtes à être exécutées.

AS_Administrators

InstanceStoreObservers

Les membres de ce rôle peuvent rechercher des instances dans le magasin d'instances et récupérer des commandes de la file d'attente de commandes dans le magasin.

AS_Administrators et AS_Observers

InstanceStoreUsers

Les membres de ce rôle peuvent charger et enregistrer des instances. Les actions de chargement et d'enregistrement sont effectuées par un hôte de service exécutant un flux de travail.

Si les instances d'un service Service1 sont persistantes dans le magasin d'instances Store1, le pool d'applications AppPool1 qui exécute l'hôte de service doit être exécuté sous une identité dont les droits d'utilisateur sont stockés dans le magasin Store1.

IIS_USRS

Pour obtenir des conseils de sécurité basés sur des scénarios pour la persistance, consultez la rubrique Configuration de la sécurité pour les magasins de persistance.

Voir aussi

Concepts

Configuration de la sécurité pour les magasins de persistance
Installation et configuration du service de gestion du flux de travail

  2012-03-05