Vue d'ensemble des services de workflow
Les services de workflow sont des services basés sur WCF et implémentés par le biais de workflows. Les services de workflow sont des workflows qui utilisent les activités de messagerie pour envoyer et recevoir des messages Windows Communication Foundation (WCF). .NET Framework 4.5 introduit plusieurs activités de messagerie qui vous permettent d'envoyer et de recevoir des messages à partir d'un workflow. Pour plus d’informations sur les activités de messagerie et leur utilisation pour implémenter différents modèles d'échange de messages, consultez Activités de messagerie.
Avantages de l'utilisation de services de workflow
Les applications étant de plus en plus distribuées, les services individuels sont désormais chargés d'appeler d'autres services pour alléger en partie la tâche. Implémenter ces appels en tant qu'opérations asynchrones rend le code plus complexe. La gestion des erreurs ajoute une complexité supplémentaire, sous la forme d'une gestion des exceptions et de la fourniture d'informations de suivi détaillées. Certains services ont souvent une durée d'exécution longue et peuvent consommer de précieuses ressources système à attendre une entrée. En raison de ces problèmes, les applications distribuées sont souvent très complexes, difficiles à écrire et à maintenir. Les workflows constituent une méthode naturelle pour exprimer la coordination de travail asynchrone, notamment les appels aux services externes. Les workflows sont également efficaces pour représenter des processus d'entreprise de longue durée. Ces qualités font du workflow une ressource importante pour la construction de services dans un environnement distribué.
Implémentation d’un service de workflow
Lorsque vous implémentez un service WCF, vous définissez plusieurs contrats qui décrivent le service ainsi que les données qu’il envoie et reçoit. Les données sont représentées en tant que contrats de données et contrats de message. Les services WCF et les services de workflow utilisent tous des définitions de contrat de données et de contrat de message dans le cadre des descriptions du service. Le service lui-même expose des métadonnées (au format WSDL) pour décrire les opérations du service. Dans WCF, les contrats de service et les contrats d'opération définissent le service et les opérations qu'il prend en charge. Toutefois dans un service de workflow, ces contrats font partie du processus d'entreprise lui-même. Ils sont exposés dans les métadonnées par un processus appelé l'inférence de contrat. Lorsqu'un service de workflow est hébergé à l'aide d'un objet WorkflowServiceHost, la définition du workflow est examinée et un contrat est généré en fonction du jeu d'activités de messagerie qui se trouvent dans le workflow. Plus particulièrement, les activités et les propriétés suivantes sont utilisées pour générer le contrat :
Receive Activité
SendReply Activité
TransactedReceiveScope Activité
Le résultat final de l'inférence de contrat est une description du service utilisant les mêmes structures de données que les services WCF et les contrats d'opération. Puis ces informations sont utilisées pour exposer WSDL pour le service de workflow.
Notes
.NET Framework 4.6.1 ne vous permet pas d'écrire des services de workflow avec une définition de contrat existante, sans une prise en charge d'outils supplémentaires. Les contrats du service de workflow sont créés par le processus d'inférence de contrat présenté précédemment. Les contrats de message et les contrats de données sont toutefois entièrement pris en charge.
Services de workflow et liaisons basées sur MSMQ
WCF définit deux liaisons NetMsmqBinding et MsmqIntegrationBinding basées sur MSMQ. Les liaisons basées sur MSMQ sont souvent utilisées avec les services de workflow en raison de la longue durée d’exécution de ces services. Les liaisons basées sur MSMQ ont une propriété ValidityDuration
qui spécifie comment de temps les messages MSMQ peuvent supposer être valides. En raison de la longue durée d'exécution des services de workflow, il est possible que la durée de validité d'un message MSMQ expire avant que le service de workflow puisse le traiter. Il est donc très important d’affecter une valeur appropriée à la durée de validité d’une liaison MSMQ. Cette valeur doit être choisie en fonction du workflow et de sa manière de traiter les messages. Par exemple si vous avez un workflow avec une activité Receive suivie d'une activité personnalisée qui s'exécute pendant 10 minutes, elle-même suivie d'une autre activité Receive, la valeur correcte pour ValidityDuration
doit être supérieure à 10 minutes.
Hébergement d'un service de workflow
Comme les services WCF, les services de workflow doivent être hébergés. Les services WCF utilisent la classe ServiceHost pour héberger les services, tandis que les services de workflow utilisent la classe WorkflowServiceHost pour les héberger. Comme les services WCF, les services de workflow peuvent être hébergés de diverses manières, par exemple :
Dans une application .NET Framework managée.
Dans les Services IIS (Internet Information Services).
dans le service d'activation des processus Windows (WAS, Windows Process Activation Service) ;
dans un service Windows managé.
Les services de workflow hébergés dans une application .NET Framework managée ou dans un service Windows managé créent une instance de la classe WorkflowServiceHost et lui passent une instance du WorkflowService contenant la définition du workflow dans la propriété Body. Une définition de workflow contenant des activités de messagerie est exposée en tant que service de workflow.
Pour héberger un service de workflow dans les services IIS ou WAS, placez dans un répertoire virtuel le fichier .xamlx qui contient la définition du service de workflow. Un point de terminaison par défaut (utilisant BasicHttpBinding) est créé automatiquement. Pour plus d’informations, consultez Configuration simplifiée. Vous pouvez également placer un fichier Web.config dans le répertoire virtuel pour spécifier vos propres points de terminaison. Si votre définition de workflow se trouve dans un assembly, vous pouvez placer un fichier .svc dans le répertoire virtuel et l'assembly de workflow dans le répertoire App_Code. Le fichier .svc doit spécifier la fabrique hôte de service et la classe qui implémente le service de workflow. L'exemple suivant montre comment spécifier la fabrique hôte de service et la classe qui implémente le service de workflow.
<%@ServiceHost Factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory"
Service="EchoService"%>