Partager via


Fonctionnalités spécifiques à Windows Workflow Foundation

.NET Framework 4 ajoute un certain nombre de fonctionnalités à Windows Workflow Foundation. Ce document décrit quelques-unes de ces nouvelles fonctionnalités et donne des détails relatifs à certains scénarios dans lesquels elles peuvent être utiles.

Activités de messagerie

Les activités de messagerie (Receive, SendReply, Send, ReceiveReply) sont utilisées pour l’envoi et la réception de messages WCF de votre flux de travail. Les activités Receive et SendReply sont utilisées pour former une opération de service Windows Communication Foundation (WCF) exposée via WSDL, comme des services web WCF standard. Les activités Send et ReceiveReply sont utilisés pour consommer un service web similaire à une classe WCF ChannelFactory ; il existe également une expérience Ajouter une référence de service pour Workflow Foundation, qui génère des activités préconfigurées.

Activités de messagerie - Mise en route

  • Dans Visual Studio 2012, créez un projet d’application de service de flux de travail WCF. Une combinaison Receive et SendReply sera placée sur votre zone de dessin.

  • Cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter une référence de service. Pointez sur un service web WSDL existant, puis cliquez sur OK. Générez votre projet pour afficher les activités générées (implémentées à l’aide de Send et ReceiveReply) dans votre boîte à outils.

  • Documentation sur les services de flux de travail

Exemple de scénario d'activités de messagerie

Un service BestPriceFinder fait appel à plusieurs compagnies aériennes afin de trouver le billet au meilleur prix pour un trajet particulier. L’implémentation de ce scénario vous oblige à utiliser les activités de message pour recevoir la demande de prix, récupérer les prix des services dorsaux, et répondre à la demande de prix avec le meilleur prix. Elle vous oblige également à utiliser d’autres activités prêtes à l’emploi afin de créer la logique métier pour calculer le meilleur prix.

WorkflowServiceHost

La classe WorkflowServiceHost est l’hôte de flux de travail prêt à l’emploi qui prend en charge plusieurs instances, la configuration et la messagerie WCF (bien que les flux de travail ne doivent pas nécessairement utiliser la messagerie pour être hébergés). Il permet également la persistance, le suivi et le contrôle de l'instance par un ensemble de comportements de service. Tout comme la classe ServiceHost de WCF, la classe WorkflowServiceHost peut être auto-hébergée dans une application console/WinForms/WPF ou un service Windows, ou hébergée sur le web (en tant que fichier .xamlx) dans IIS ou WAS.

Mise en route avec l'hôte du service de workflow

Scénario WorkflowServiceHost

Un service BestPriceFinder fait appel à plusieurs compagnies aériennes afin de trouver le billet au meilleur prix pour un itinéraire particulier. L’implémentation de ce scénario vous oblige à héberger le flux de travail dans WorkflowServiceHost. Elle utilise également les activités de message pour recevoir la demande de prix, récupérer les prix des services dorsaux, et répondre à la demande de prix avec le meilleur prix.

Corrélation

Une corrélation correspond à l'un des deux concepts suivants :

  • manière de regrouper des messages ; autrement dit, la relation entre un message de demande et sa réponse ;

  • manière de mapper des données à une instance de service.

Mise en route

  • Pour démarrer une corrélation, créez un projet dans Visual Studio. Créez une variable de type CorrelationHandle.

  • À titre d'exemple de corrélation utilisé pour regrouper des messages, citons une corrélation demande-réponse.

  • Une corrélation basée sur le contenu qui mappe des données (un numéro de commande, par exemple) à une instance de flux de travail particulière constitue un exemple de mappage de données à une instance de service.

    • Dans une activité de messagerie, cliquez sur la propriété CorrelationInitializers et ajoutez un QueryCorrelationInitializer à l'aide de la variable CorrelationHandle créée ci-dessus. Double-cliquez sur la propriété de votre choix dans le message (par exemple, OrderID) du menu déroulant. Définissez la propriété CorrelatesWith avec la variable CorrelationHandle utilisée précédemment.
  • Documentation conceptuelle relative à la corrélation

Scénario de corrélation

Un flux de travail de traitement de commandes est utilisé pour gérer la création de commandes et la mise à jour de commandes existantes en cours de traitement. L’implémentation de ce scénario vous oblige à héberger le flux de travail dans WorkflowServiceHost, et à utiliser les activités de messagerie. Elle exige également une corrélation basée sur l’orderId pour s’assurer que les mises à jour sont apportées au flux de travail approprié.

Configuration simplifiée

Le schéma de configuration WCF est complexe et propose des fonctionnalités difficiles à trouver par les utilisateurs. Dans .NET Framework 4.6.1, nous nous sommes attachés à aider les utilisateurs de WCF quand ils configurent leurs services avec les fonctionnalités suivantes :

  • Plus besoin de configuration explicite par service. Si vous ne configurez pas d’éléments <service> pour votre service et que ce dernier ne définit aucun point de terminaison par programme, un jeu de points de terminaison est automatiquement ajouté à votre service : un pour chaque adresse de base de service et pour chaque contrat implémenté par votre service.

  • Permet à l’utilisateur de définir pour les comportements et les liaisons WCF des valeurs par défaut qui seront appliquées aux services sans configuration explicite.

  • Les points de terminaison standard définissent les points de terminaison préconfigurés réutilisables qui ont des valeurs fixes pour une ou plusieurs propriétés de point de terminaison (adresse, liaison ou contrat) et permettent la définition de propriétés personnalisées.

  • Enfin, le ConfigurationChannelFactory<TChannel> permet d’effectuer la gestion centralisée de la configuration du client WCF, ce qui est utile dans les cas où une configuration est sélectionnée ou modifiée après le chargement du domaine d’application.

Mise en route

Scénarios de configuration simplifiée

  • Un développeur ASMX expérimenté souhaite commencer à utiliser WCF. Toutefois, WCF lui semble trop compliqué. Quelles sont les informations dont j'ai besoin pour écrire dans un fichier de configuration ? Dans .NET 4, vous pouvez même décider de ne pas avoir de fichier de configuration du tout.

  • Il est très difficile de configurer et de gérer un ensemble existant de services WCF. Le fichier de configuration contient des milliers de lignes de code XML qui doivent être manipulées avec la plus grande prudence. De l'aide est nécessaire pour réduire la quantité de code afin que ce dernier soit plus facile à gérer.

Programme de résolution de contrat de données

Dans .NET Framework 3.5, il existait quelques limitations à la conception de types connus :

  • L’ajout de types connus de manière dynamique pendant la sérialisation ou la désérialisation était impossible.

  • Les sérialiseurs n'étaient pas en mesure de gérer des informations xsi:type inconnues.

  • Il n'était pas possible pour les utilisateurs de spécifier le xsi:type qu'ils souhaitaient voir apparaître sur le câble pour, par exemple, réduire la taille d'une instance de sérialisation sur ce dernier.

Le DataContractResolver résout ces problèmes dans .NET Framework 4.5.

Mise en route

Scénarios d'un programme de résolution de contrat de données

  • Éviter d'avoir à déclarer des dizaines d'objets KnownTypeAttribute dans un service.

  • Réduire la taille d'un objet BLOB XML.

Organigramme

Un organigramme est un paradigme connu permettant la représentation visuelle de problèmes liés à un domaine. Il s’agit d’un nouveau style de flux de contrôle qui a été introduit dans .NET Framework 4. La principale caractéristique d'un organigramme tient dans le fait qu'une seule activité est exécutée à un moment donné. Les organigrammes peuvent représenter des boucles et des alternatives possibles, mais ne peuvent pas, de manière native, représenter l'exécution simultanée de plusieurs nœuds.

Mise en route

Scénarios d'organigramme

Une activité d'organigramme peut permettre d'implémenter un jeu de devinette. Le jeu de devinette est très simple : l'ordinateur sélectionne un nombre aléatoire et le joueur doit deviner ce nombre. À chaque fois que le joueur fait une proposition, l’ordinateur lui donne un indice (par exemple, « essayez un nombre inférieur »). Si le joueur devine le nombre en moins de 7 tentatives, il reçoit de l’ordinateur un message de félicitation spécial. Ce jeu peut être implémenté avec une combinaison des activités procédurales suivantes :

Activités procédurales (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Les activités procédurales fournissent un mécanisme de modélisation d'un flux de contrôle séquentiel en faisant appel à des concepts que connaissent bien les programmeurs. Ces activités permettent les constructions de langage de programmation structurées de manière traditionnelle et, lorsque cela s’avère nécessaire, une parité de langages avec les langages procéduraux courants, tels que C# et Visual Basic.

Mise en route

Scénarios d'activités procédurales

  • Parallel : un système de gestion documentaire intranet dispose d’un flux de travail d’approbation des documents. Les documents doivent être approuvés par du personnel travaillant dans plusieurs services différents avant d'être publiés sur le réseau intranet. Aucun ordre d’approbation n’est établi ; l’approbation peut avoir lieu à tout moment, tant que le document se trouve en phase d’« attente d’approbation ». Lorsqu’un utilisateur soumet un document à des fins de révision, ce dernier doit être approuvé par son supérieur hiérarchique direct, par l’administrateur de l’intranet et par le responsable de la communication interne.

  • ParallelForEach<T> : une application WF gère les achats au sein d'une grande entreprise. Les règles d'entreprise imposent une évaluation de trois fournisseurs différents avant toute planification d'une opération d'achat. Un employé travaillant dans le service Achat sélectionne trois fournisseurs dans la liste des fournisseurs de la société. Une fois que ces fournisseurs ont été sélectionnés et informés, la société attend de recevoir leur offre. L'ordre de réception des offres n'a pas d'importance. Pour implémenter ce scénario dans WF, nous utilisons un ParallelForEach<T> qui permettra une recherche au sein de la liste de fournisseurs et demandera une offre de leur part. Une fois que toutes les offres ont été recueillies, la meilleure est sélectionnée et affichée.

InvokeMethod

L'activité InvokeMethod permet l'appel de méthodes publiques dans des objets ou des types de l'étendue. Elle prend en charge l'appel de méthodes statiques et d'instances avec ou sans paramètres (y compris les tableaux de paramètres), ainsi que les méthodes génériques. Elle permet également l’exécution de la méthode de façon synchrone et de façon asynchrone.

Mise en route

  • Dans Visual Studio 2012, créez une application console de flux de travail. Ajoutez une activité InvokeMethod dans le concepteur de workflow et configurez-y des méthodes d'instances et statiques.

  • Documentation du concepteur : Concepteur d’activités InvokeMethod

Scénarios InvokeMethod

  • Une méthode doit être appelée dans un objet de l'étendue. Par exemple, une valeur doit être ajoutée à un dictionnaire. La méthode d'ajout de l'instance du dictionnaire est appelée, puis la clé et la valeur sont fournies.

  • Une méthode doit être appelée sur un objet CLR hérité. Au lieu de créer une activité personnalisée pour encapsuler l'appel dans cette classe héritée, s'il se trouve dans l'étendue pendant l'exécution du flux de travail, il est possible d'utiliser InvokeMethod.

Activités de gestion des erreurs

L’activité TryCatch fournit un mécanisme d’interception d’exceptions qui se produisent lors de l’exécution d’un ensemble d’activités contenues (similaire à la construction Try/Catch dans C# et Visual Basic). TryCatch permet la gestion des exceptions au niveau du flux de travail. Si une exception non gérée est levée, le flux de travail est abandonné et le bloc Finally n’est pas exécuté. Ce comportement est cohérent avec le langage C#.

Mise en route

Scénarios de gestion des erreurs

Un ensemble d'activités doit être exécuté et une logique spécifique être exécutée en cas d'erreur. Si, au cours de la logique de gestion des erreurs, il apparaît qu'il n'est pas possible de remédier à l'erreur, l'exception est à nouveau levée et l'activité parente (ou l'hôte) se charge du problème.

Activité Pick

L'activité Pick fournit une modélisation de flux de contrôle basée sur les événements dans WF. Pick contient de nombreuses branches, où chacune d'entre elles attend qu'un événement particulier se produise avant de s'exécuter. Dans cette configuration, un Pick se comporte de manière similaire à un Switch<T> dans lequel l'activité exécutera un seul des jeux d'événements qu'elle écoute. Chaque branche est pilotée par l’événement et celui qui se produit exécute la branche correspondante. Toutes les autres branches annulent et arrêtent l'écoute des événements.

Mise en route

Scénario de l'activité Pick

Un utilisateur doit être invité à entrer des informations. Dans des circonstances normales, le développeur utiliserait un appel de méthode similaire à ReadLine pour inviter un utilisateur à entrer des données. Le problème avec cette configuration est que le programme attend que l'utilisateur entre des données. Dans ce scénario, un délai d'attente est nécessaire pour débloquer une activité bloquante. Dans la plupart des scénarios, une tâche doit être effectuée pendant une durée déterminée. La définition d'un délai d'attente pour une activité bloquante fait partie des cas où Pick apporte une grande valeur ajoutée.

Service de routage WCF

Le service de routage est conçu pour être un routeur logiciel générique qui vous permet de contrôler la façon dont les messages WCF circulent entre vos clients et services. Le service de routage vous permet de découpler vos clients de vos services, ce qui vous donne beaucoup plus de liberté en termes de configurations que vous pouvez prendre en charge, et la flexibilité dont vous disposez lorsque vous envisagez d’héberger vos services. Dans .NET Framework 3.5, les clients et les services étaient étroitement couplés ; un client devait connaître tous les services auxquels il avait besoin de parler, ainsi que leur emplacement. Par ailleurs, WCF présentait les limitations suivantes dans .NET Framework 3.5 :

  • La gestion des erreurs était complexe car cette logique devait être codée en dur côté client.

  • Les clients et les services devaient toujours utiliser les mêmes liaisons.

  • Les services étaient rarement conçus de manière appropriée : il est plus facile de faire communiquer le client avec un service qui implémente tout un ensemble, plutôt que de choisir entre plusieurs services.

Le service de routage dans .NET 4 est conçu pour faciliter la résolution de ces problèmes. Le nouveau service de routage présente les fonctionnalités suivantes :

  1. Routage basé sur le contenu (les objets MessageFilter examinent un message afin de déterminer sa destination.)

  2. Pontage de protocoles (transport et message)

  3. Gestion des erreurs (le routeur intercepte les exceptions de communication et bascule sur les points de terminaison de sauvegarde)

  4. Mise à jour dynamique (en mémoire) de MessageFilterTable<TFilterData> et configuration du routage.

Mise en route

  1. Documentation : Routage

  2. Échantillons : Routing Services [WCF Samples]

  3. Blog : Règles de routage

Scénarios de routage

Le service de routage s'avère utile dans les scénarios suivants :

  • Les clients peuvent communiquer avec plusieurs services sans avoir à s'adresser à l'ensemble d'entre eux directement.

  • Les clients peuvent apporter une logique supplémentaire à une demande du client afin de déterminer la destination du routage

  • Décomposez les opérations effectuées par un client en plusieurs implémentations du service sans refactoriser le client.

  • Les clients et les services peuvent présenter différentes liaisons avec différents paramètres de sécurité.

  • Les clients peuvent être configurés de manière à être plus fiables en cas de défaillance ou d'indisponibilité des services.

Discovery WCF

WCF Discovery est une technologie d’infrastructure qui vous permet d’incorporer un mécanisme de découverte dans votre infrastructure d’applications. Vous pouvez vous en servir pour rendre votre service détectable et configurer vos clients pour qu'ils recherchent des services. Les clients n'ont plus besoin d'être codés en dur avec un point de terminaison, ce qui rend votre application plus fiable et plus tolérante aux pannes. Discovery est la plateforme parfaite pour intégrer des fonctionnalités d'auto-configuration à votre application.

Le produit repose sur la norme WS-Discovery. Il est conçu pour être interopérable, extensible et générique. Le produit prend en charge deux modes d'opération :

  1. Managed : lorsqu'une entité sur le réseau est informée des services existants, les clients l'interrogent directement. Ce comportement est similaire à Active Directory.

  2. Ad-hoc : lorsque les clients utilisent des messages de multidiffusion pour localiser des services.

Par ailleurs, les messages de découverte ne dépendent pas du protocole réseau ; vous pouvez les utiliser avec tout protocole qui prend en charge les besoins de chaque mode. Par exemple, des messages de multidiffusion de découverte peuvent être envoyés via le canal UDP ou tout autre réseau prenant en charge la messagerie de multidiffusion. Ces points de conception, combinés avec la flexibilité de la fonctionnalité, vous permettent d’adapter la découverte à votre solution.

Mise en route

Scénarios Discovery

Un développeur ne souhaite pas coder en dur les points de terminaison car la date de disponibilité de mon service n'est pas encore connue. Il souhaite plutôt choisir un service au moment de l’exécution. Un plus grand degré de découplage, de fiabilité et de configuration automatique est requis entre les composants de l'application.

Suivi

Le suivi de flux de travail fournit des informations sur l’exécution d’une instance de flux de travail. Les événements de suivi sont émis à partir d’un flux de travail au niveau de l’instance de flux de travail et lors de l’exécution d’activités au sein du flux de travail. Un participant au suivi du flux de travail doit être ajouté à l'hôte du flux de travail pour s'abonner aux enregistrements de suivi. Les enregistrements de suivi sont filtrés à l'aide d'un profil de suivi. Le .NET Framework fournit un participant au suivi ETW (Event Tracing for Windows), et un profil de base est installé dans le fichier machine.config.

Mise en route

  1. Dans Visual Studio 2010, créez un projet d'application de service de flux de travail WCF. Une paire Receive et SendReply sera placée dans votre zone de dessin pour le démarrage.

  2. Ouvrez le fichier web.config et ajoutez un comportement de suivi ETW sans profil.

    1. Le profil par défaut est utilisé.

    2. Ouvrez l’Observateur d’événements et activez le canal analytique dans le nœud suivant : Observateur d’événements, Journaux des applications et des services, Microsoft, Windows, Serveur d’applications-Applications. Cliquez avec le bouton droit sur Analyse, puis sélectionnez Activer le journal.

    3. Exécutez le service de flux de travail.

    4. Observez les événements de suivi du flux de travail dans l'observateur d'événements.

  3. Exemples : Suivi

  4. Documentation conceptuelle : Suivi et traçage de flux de travail

Magasin d'instances de workflow SQL

Le SqlWorkflowInstanceStore est une implémentation basée sur SQL d'un magasin d'instances. Un magasin d'instances stocke l'état d'une instance en cours d'exécution avec l'ensemble des données nécessaires au chargement et à la reprise de cette instance. L'hôte du service demande au magasin d'instances d'enregistrer l'état de l'instance si le flux de travail persiste et de charger l'état de l'instance quand un message arrive pour cette instance ou qu'une activité de report arrive à expiration.

Mise en route

  1. Dans Visual Studio 2012, créez un flux de travail contenant une activité Persist implicite ou explicite. Ajoutez le comportement SqlWorkflowInstanceStore à votre hôte de service de workflow. Cela peut se faire dans le code ou dans le fichier de configuration de l'application.

  2. Échantillons : Persistence

  3. Documentation conceptuelle : Magasin d’instances de flux de travail SQL.