Partager via


Modèle de flux de travail parent-enfant utilisant une corrélation duplex durable

Une approche de conception courante permettant d'implémenter un flux de travail pour un processus de longue durée complexe consiste à identifier des subdivisions de la logique métier qui peuvent être isolées en flux de travail plus petits, plus simples et réutilisables, puis de coordonner leur exécution à partir du flux de travail principal. Par exemple, pour le traitement d'un bon de commande, vous pouvez choisir de définir la logique d'expédition par un flux de travail (enfant), qui à son tour est appelé par le flux de travail principal du bon de commande (parent) le cas échéant.

Windows Workflow Foundation pour .NET Framework 4 n'intègre aucune fonctionnalité permettant d'appeler un flux de travail de longue durée à partir d'un autre. Plusieurs options d'implémentation permettent néanmoins aux développeurs de configurer manuellement un tel comportement. L'objectif de cet exemple n'est pas d'examiner toutes les options disponibles, mais plutôt d'attirer l'attention sur une approche générique et courante d'implémentation du modèle d'appel de flux de travail (corrélation duplex durable), plus spécifiquement dans le contexte des services de flux de travail WCF de longue durée (flux de travail XAMLX). Le concept sous-jacent au modèle duplex durable est simple : le parent appelle un point de terminaison exposé par l'enfant, en transmettant un jeton de contexte (utilisé pour la corrélation) et une adresse de rappel avec le message de demande. Une fois la demande exécutée par l'enfant, celui-ci rappelle le parent pour lui signifier qu'il a terminé.

Pour plus d'informations sur la configuration manuelle du scénario duplex, consultez l'article MSDN à la page Duplex durable (https://go.microsoft.com/fwlink/?LinkId=196632) et les exemples WF associés Exemple Durable Duplex (https://go.microsoft.com/fwlink/?LinkId=194430) et Create a Workflow Service That Calls Another Workflow Service (en anglais)

Cet exemple vise à fournir deux activités personnalisées basées sur l'interface IActivityTemplateFactory, lesquelles sont conçues pour simplifier l'implémentation du modèle duplex durable en automatisant le processus de configuration. L'activité Workflow Callable Sequence est utilisée dans le flux de travail enfant au lieu des activités Receive et Send par défaut générées lors de la création du flux de travail. L'activité Call Workflow Sequence est utilisée dans le flux de travail parent pour générer les activités et la configuration associée requises pour communiquer avec le flux de travail enfant. Ces activités peuvent être réutilisées et ajoutées à votre boîte à outils dans Visual Studio.

L'exemple comprend deux solutions :

  • La première solution (CallWorkflowActivities) contient les deux activités mentionnées ci-dessus. Pour activer ces activités avant de les utiliser dans le concepteur de flux de travail de Visual Studio, il suffit de compiler la solution et d'ajouter les activités de l'assembly résultant à la boîte à outils de Visual Studio.

  • La deuxième solution (DurableDuplex_with_CallWorkflowActivities) est un exemple d'implémentation de flux de travail parent et enfant qui communiquent via la corrélation duplex durable configurée à l'aide des activités Workflow Callable Sequence et Call Workflow Sequence.

Notes

Les exemples sont fournis à titre éducatif uniquement. Ils ne sont pas destinés à être utilisés dans un environnement de production et n'ont pas été testés à cet usage. Microsoft ne fournit aucune assistance technique pour ces exemples.

Conditions préalables

Cet exemple d'application est conçu pour les lecteurs possédant l'expérience ou les connaissances suivantes :

  • connaissances de base des services Internet (IIS) ;

  • connaissances de base des applications Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) ;

  • connaissances de base de Windows PowerShell ;

  • connaissances de base de Microsoft SQL Server.

En outre, les fonctionnalités d'exécution des services d'hébergement de Windows Server AppFabric doivent être installées et les fonctionnalités suivantes doivent être configurées pour permettre l'exécution de la solution DurableDuplex_with_CallWorkflowActivities.

  • magasin de persistance ;

  • magasin de surveillance ;

Emplacement et fichiers de l'exemple d'application

Solution 1 : CallWorkflowActivities

Nom de fichier Description

CallWorkflowActivities.sln

Fichier de solution pour la solution CallWorkflowActivities

CallWorkflowActivities

Dossier du projet

CallWorkflowActivities.csproj

Fichier du projet

Properties\AssemblyInfo.cs

Fichier d'informations de l'assembly

Activities\WorkflowCallableSequence.cs, Activities \CallWorkflowService.cs

Fichiers sources des deux activités IActivityTemplateFactory (WorkflowCallableSequence et CallWorkflowService)

UI\CallWorkflowConfiguration.xaml, UI\CallWorkflowConfiguration.xaml.cs, UI\WebConfigContent.xaml, UI\WebConfigContent.xaml.cs, UI\WorkflowCallableSequenceConfiguration.xaml, UI\WorkflowCallableSequenceConfiguration.xaml.cs

Conception de l'IU et fichiers sources des boîtes de dialogue utilisées pour la configuration de la corrélation duplex durable

Code\Helpers.cs

Code source avec classes de prise en charge

Images\requiredBang.gif

Fichier image de champ obligatoire

Solution 2 : DurableDuplex_with_CallWorkflowActivities

Nom de fichier Description

DurableDuplex_with_CallWorkflowActivities.sln

Fichier de solution pour la solution DurableDuplex_with_CallWorkflowActivities

SampleChildService

Dossier de projet du service Sample Child

SampleChildService.csproj

Fichiers de projet du service Sample Child

Properties\AssemblyInfo.cs

Fichier d'informations de l'assembly

ChildWorkflow.xamlx

Définition du service de flux de travail enfant (XAMLX)

Web.config

Fichier de configuration Web du service enfant

SampleParentService

Dossier de projet du service Sample Parent

SampleParentService.csproj

Fichiers de projet du service Sample Parent

Properties\AssemblyInfo.cs

Fichier d'informations de l'assembly

ParentWorkflow.xamlx

Définition du flux de travail du service parent (XAMLX)

Web.config

Fichier de configuration Web du service parent

SampleClient

Dossier du client de test

SampleClient.csproj

Fichier de projet du client de test

mainForm.cs, mainForm.Designer.cs, mainForm.resx, Program.cs

Fichiers sources du formulaire principal et de l'application

Properties\Resources.Designer.cs, Properties\Resources.resx, Properties\Settings.Designer.cs, Properties\Settings.settings

Fichiers de ressources et paramètres du projet

Properties\AssemblyInfo.cs

Fichier d'informations de l'assembly

app.config

Fichier des paramètres d'application du client de test

Configuration de l'exemple

  1. Démarrez Visual Studio 2010 avec des autorisations administratives.

    Notes

    Les étapes suivantes illustrent la création et le déploiement des solutions CallWorkflowActivities et DurableDuplex_with_CallWorkflowActivities à l'aide de Visual Studio 2010, ainsi que la configuration d'un pool d'applications à utiliser avec ces services :

  2. Ouvrez le fichier <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\ CallWorkflowActivities\CallWorkflowActivities.sln, où <samples> représente le chemin d'accès au dossier contenant les exemples AppFabric.

  3. Dans le menu Générer, cliquez sur Générer la solution. Vérifiez que le projet est correctement créé dans la fenêtre de sortie.

    Notes

    L'assembly correspondant aux activités WorkflowCallableSequence et CallWorkflowService est désormais compilé et prêt à être ajouté à la barre d'outils (pour plus d'informations, consultez la section Exécution de l'exemple).

  4. Ouvrez le fichier <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\DurableDuplex_with_CallWorkflowActivities\ DurableDuplex_with_CallWorkflowActivities.sln, où <samples> représente le chemin d'accès au dossier contenant les exemples AppFabric.

  5. Lorsque vous êtes invité à créer les répertoires virtuels pour les projets SampleParentService et SampleChildService, cliquez sur Oui.

  6. Dans le menu Générer, cliquez sur Générer la solution. Vérifiez que les trois projets sont correctement créés dans la fenêtre de sortie.

  7. Démarrez le Gestionnaire des services Internet (IIS). Cliquez sur Démarrer, Tous les programmes, Windows Server AppFabric, puis cliquez sur Gestionnaire des services Internet (IIS).

  8. Dans l'arborescence à gauche de la fenêtre, développez le nœud du serveur, puis cliquez sur Pool d'applications.

  9. Dans la liste, cliquez avec le bouton droit sur le pool qui exécutera les services d'exemple (vous pouvez utiliser un des pools existants ou en créer un), puis sélectionnez Paramètres avancés.

  10. Définissez le champ Version du .NET Framework sur l'option v4.0 à l'aide de la liste déroulante, puis cliquez sur OK.

  11. Dans le volet gauche, développez successivement Sites, puis Site Web par défaut.

  12. Recherchez l'application SampleChildService, cliquez avec le bouton droit dessus, sélectionnez Gérer l'application, puis Paramètres avancés.

  13. Mettez à jour la propriété Protocoles activés de http vers http,net.pipe. Notez qu'il n'y a pas d'espace derrière la virgule. Cliquez sur OK pour confirmer les modifications.

  14. Dans la propriété Pool d'applications, accédez au pool d'applications que vous avez configuré à l'étape 9.

  15. Recherchez l'application SampleParentService, cliquez dessus avec le bouton droit, sélectionnez Gérer l'application, puis Paramètres avancés.

  16. Mettez à jour la propriété Protocoles activés de http vers http,net.pipe. Notez qu'il n'y a pas d'espace derrière la virgule. Cliquez sur OK pour confirmer les modifications.

  17. Dans la propriété Pool d'applications, accédez au pool d'applications que vous avez configuré à l'étape 9.

    Notes

    Les étapes 13 à 16 permettent d'ajouter le protocole net.pipe aux applications des services parent et enfant (ce protocole est nécessaire à la gestion des instances de flux de travail persistantes).

Exécution de cet exemple : Option 1

  1. Démarrez Visual Studio 2010 avec des autorisations administratives.

    Important

    Deux options (dont les étapes sont décrites dans cette rubrique) sont envisageables pour exécuter cet exemple. L'option 1 propose un aperçu complet de l'utilisation des activités WorkflowCallableSequence et CallWorkflowService dans le but d'appeler un flux de travail enfant à partir d'un flux de travail parent, tandis que l'option 2 examine la solution finale : une implémentation de la corrélation duplex durable prête à l'emploi, sans détailler la phase de conception. Pour plus d'informations, consultez la section Démonstrations ci-dessous.

    Notes

    La solution CallWorkflowActivities est conçue pour améliorer la phase de conception de l'implémentation d'une corrélation duplex durable. Dans cette perspective, il n'y a aucun outil à exécuter. Ces étapes détaillent toutefois l'utilisation des activités au sein d'une solution simple dans laquelle un flux de travail parent appelle un flux de travail enfant.

  2. Créez un projet de type Application de service WCF (ce modèle de projet est situé sous les types de projets Flux de travail), puis nommez le projet ChildService.

  3. Ajout des exemples d'activités personnalisées à la boîte à outils : Une fois le concepteur de flux de travail ouvert, cliquez avec le bouton droit sur la boîte à outils dans le groupe d'activités Messagerie.

  4. Sélectionnez Choisir des éléments, puis cliquez sur l'onglet Composants System.Activities.

  5. Cliquez sur Parcourir et accédez au dossier <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\ CallWorkflowActivities\ CallWorkflowActivities\bin\Debug. Sélectionnez ensuite l'assembly CallWorkflowActivities.dll, puis cliquez sur Ouvrir. (Il s'agit de l'assembly compilé à l'étape 3 de la section Configuration de l'exemple de ce document.) Notez les deux nouvelles entrées en haut de la liste Composants System.Activities.

  6. Cliquez sur OK pour ajouter les activités CallWorkflowService et WorkflowCallableSequence à votre boîte à outils. Celle-ci doit ressembler à la capture d'écran suivante.

  7. Implémentation du flux de travail ChildService : Dans l'Explorateur de solutions, renommez Service1.xamlx en ChildService.xamlx.

  8. Dans la partie centrale du concepteur, sélectionnez l'activité Sequential Service, puis appuyez sur Suppr.

  9. Faites glisser l'activité WorkflowCallableSequence de la boîte à outils vers la surface du concepteur de flux de travail. Cette action ouvre la boîte de dialogue de configuration qui vous guide dans le processus de configuration du flux de travail ChildService en tant que participant du scénario duplex durable.

  10. Configuration de l'activité WorkflowCallableSequence : Entrez les propriétés comme illustré dans la capture d'écran suivante, puis cliquez sur OK.

  11. Mise à jour du fichier web.config : Le bon fonctionnement de l'implémentation d'une corrélation duplex durable dépend largement des entrées du fichier web.config. L'écran Mises à jour de Web.config génère automatiquement les entrées nécessaires au fichier web.config de votre flux de travail enfant.

    Notes

    Le fichier web.config n'est pas mis à jour automatiquement. Dans l'étape suivante, vous allez copier/coller les entrées requises dans le fichier web.config.

  12. Cliquez sur Copier dans le Presse-papiers et fermer. Cette action copie les entrées sélectionnées dans le Presse-papiers. Celles-ci sont alors prêtes à être collées dans le fichier web.config. Cliquez sur OK dans la boîte de message.

  13. Ouvrez le fichier web.config du projet ChildService et collez le contenu du Presse-papiers (obtenu lors de l'étape 12) juste après la balise <system.serviceModel> :

    ...
      <system.serviceModel>
    
        <services>
          <service name="ChildService">
            <endpoint address="" binding="wsHttpContextBinding" contract="ICallChildService" name="ChildServiceICallChildServiceStartWorkflow" />
          </service>
        </services>
        <client>
          <endpoint binding="wsHttpContextBinding" contract="ICallChildService" name="ChildServiceICallChildServiceWorkflowCompleted" />
        </client>
    
        <behaviors>
      ...
    
  14. Fin de l'implémentation du flux de travail ChildService : Pour des raisons de simplicité, seule la valeur de la demande à la réponse sera affectée dans le corps du flux de travail (les deux éléments constituent des chaînes par défaut ; toutefois, elles peuvent être mises à jour par des contrats de données dans une implémentation réelle).

    1. Faites glisser une activité Delay de la boîte à outils vers la séquence Body. Configurez l'activité Delay avec les propriétés suivantes : Duration = New TimeSpan(0, 2, 0).

    2. Faites glisser une activité Assign de la boîte à outils vers la séquence Body, juste après la séquence Delay. Configurez l'activité Assign avec les propriétés suivantes : To = response; Value = request.

    3. Enregistrez le projet.

  15. Activation du service pour l'hébergement IIS/WAS : Pour configurer le flux de travail à des fins d'hébergement dans IIS/WAS et AppFabric, dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet ChildService (pas la solution), puis sélectionnez Propriétés.

  16. Sélectionnez la troisième page de configuration (Web), puis, dans la section Serveurs, sélectionnez Utiliser un serveur Web IIS local. Cliquez sur Créer un répertoire virtuel, puis sur OK dans la boîte de message contextuel. Enregistrez le projet.

  17. Création du flux de travail ParentService : Dans l'Explorateur de solutions, cliquez avec le bouton droit sur la solution (pas le projet), puis sélectionnez Ajouter - >Nouveau projet. Sélectionnez Application de service WCF pour le type du projet et nommez le nouveau projet ParentService. Cliquez sur OK.

  18. Dans l'Explorateur de solutions, renommez Service1.xamlx en ParentService.xamlx.

  19. Faites glisser l'activité CallWorkflowService de la boîte à outils vers la surface du concepteur de flux de travail, juste après l'activité SendResponse. Cette action ouvre la boîte de dialogue de configuration de l'activité CallWorkflowService.

  20. À l'aide du bouton représentant des points de suspension (…), accédez à la définition du flux de travail ChildService.xamlx créée lors des étapes précédentes, puis sélectionnez wsHttpContextBinding pour confirmer la sélection de protocole effectuée à l'étape 10. La fenêtre de configuration doit ressembler à la capture d'écran suivante.

    Notes

    Tous les paramètres du contrat de service demande/réponse et des noms d'opération sont découverts automatiquement d'après la définition du service enfant.

  21. Cliquez sur OK.

  22. Mise à jour du fichier web.config : La boîte de dialogue Mises à jour de Web.config qui s'ouvre inclut les entrées nécessaires à la connexion au service enfant. Notez que l'adresse réelle du point de terminaison enfant et celle du point de terminaison de rappel requièrent toutes deux une entrée.

  23. Cliquez sur Copier dans le Presse-papiers et fermer. Cette action copie les entrées sélectionnées dans le Presse-papiers. Celles-ci sont alors prêtes à être collées dans le fichier web.config. Cliquez sur OK dans la boîte de message contextuel.

  24. Ouvrez le fichier web.config du projet ParentService et collez le contenu du Presse-papiers juste après l'élément <system.serviceModel>.

    Notes

    Observez le commentaire IMPORTANT dans le XML – Le service parent doit également exposer un point de terminaison pour ses clients. Vous pouvez utiliser l'élément <endpoint> d'exemple défini dans les commentaires. Votre fichier web.config doit ressembler à ce qui suit :

    ...
      <system.serviceModel>
    
        <services>
          <service name="Service1">
            <endpoint address="" binding="basicHttpBinding" contract="IService" />
            <endpoint address="ChildCallback" binding="wsHttpContextBinding" contract="ICallChildService" name="Service1ICallChildServiceWorkflowCompleted" />
          </service>
        </services>
        <client>
          <endpoint address="https://localhost/ChildService/ChildService.xamlx" binding="wsHttpContextBinding" bindingConfiguration="Service1ICallChildService_InitCallback" contract="ICallChildService" name="Service1ICallChildServiceStartWorkflow" />
        </client>
        <bindings>
          <wsHttpContextBinding>
            <binding name="Service1ICallChildService_InitCallback" clientCallbackAddress="https://localhost/ParentService/ParentService.xamlx/ChildCallback" />
          </wsHttpContextBinding>
        </bindings>
    
        <behaviors>
          <serviceBehaviors>
      ...
    
  25. Fin de l'implémentation du flux de travail ParentService : Le flux de travail parent doit transmettre des valeurs de paramètre à l'appel du service enfant.

    1. Pour affecter une valeur à la demande, faites glisser une activité Assign de la boîte à outils vers la séquence Call Workflow, juste avant l'activité Send Request. Configurez l'activité Assign avec les propriétés suivantes : To = request; Value = data.ToString

    2. Enregistrez le projet.

  26. Activation du flux de travail ParentService pour l'hébergement IIS/WAS : Pour configurer le flux de travail à des fins d'hébergement dans IIS/WAS et AppFabric, dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet ParentService (pas la solution), puis sélectionnez Propriétés.

  27. Sélectionnez la troisième page de configuration (Web), puis dans la section Serveurs, sélectionnez Utiliser un serveur Web IIS local. Cliquez sur Créer un répertoire virtuel, puis sur OK dans la boîte de message contextuel. Enregistrez le projet.

  28. Générez la solution.

  29. Configuration de l'environnement IIS/WAS pour l'hébergement des services durables ParentService et ChildService : Démarrez le Gestionnaire des services Internet (IIS). Cliquez sur Démarrer, Tous les programmes, Windows Server AppFabric, puis cliquez sur Gestionnaire des services Internet (IIS).

  30. Dans le volet gauche, développez successivement Sites, puis Site Web par défaut.

  31. Recherchez l'application ChildService, cliquez dessus avec le bouton droit, sélectionnez Gérer l'application, puis Paramètres avancés.

  32. Mettez à jour la propriété Protocoles activés de http vers http,net.pipe. Notez qu'il n'y a pas d'espace derrière la virgule. Cliquez sur OK pour confirmer les modifications.

  33. Recherchez l'application ParentService, cliquez dessus avec le bouton droit, sélectionnez Gérer l'application, puis Paramètres avancés.

  34. Mettez à jour la propriété Protocoles activés de http vers http,net.pipe. Notez qu'il n'y a pas d'espace derrière la virgule. Cliquez sur OK pour confirmer les modifications.

  35. Exécutez l'application WCFTestClient pour démarrer une instance du flux de travail parent. Pour cela, exécutez la commande suivante : C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe (pour les plateformes 32 bits) ou "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\WcfTestClient.exe" (pour les plateformes 64 bits).

  36. Sélectionnez Add->Add Service pour ajouter une référence au service parent - https://localhost/ParentService/ParentService.xamlx.

  37. Une fois la référence ajoutée, double-cliquez sur la méthode GetData(). Dans le volet gauche, tapez 123 comme valeur de paramètre int. Cliquez sur Appeler.

  38. Utilisez le tableau de bord d'AppFabric pour vérifier l'état des instances ParentService et ChildService. Vous remarquerez qu'une fois l'instance ChildService terminée, l'instance ParentService est également terminée car elle reçoit une notification d'exécution de l'instance enfant.

Exécution de cet exemple : Option 2

  1. Démarrez Visual Studio 2010 avec des autorisations administratives.

    Important

    Deux options (dont les étapes sont décrites dans cette rubrique) sont envisageables pour exécuter cet exemple. L'option 1 propose un aperçu complet de l'utilisation des activités WorkflowCallableSequence et CallWorkflowService dans le but d'appeler un flux de travail enfant à partir d'un flux de travail parent, tandis que l'option 2 examine la solution finale : une implémentation de la corrélation duplex durable prête à l'emploi, sans détailler la phase de conception. Pour plus d'informations, consultez la section Démonstrations ci-dessous.

  2. Ouvrez le fichier <samples>\ Samples\Integration\Call Workflow (DurableDuplex)\DurableDuplex_with_CallWorkflowActivities\ DurableDuplex_with_CallWorkflowActivities.sln, où <samples> représente le chemin d'accès au dossier contenant les exemples AppFabric.

  3. Vérifiez que le projet SampleClient est défini comme projet de démarrage en cliquant avec le bouton droit sur le projet SampleClient, puis cliquez sur Définir en tant que projet de démarrage.

  4. Appuyez sur F5 pour exécuter l'exemple. L'exemple d'application de client test démarre.

  5. Cliquez sur Appeler le service parent.

  6. Examinez le contenu de la zone de texte Instances de flux de travail. Elle affiche les événements de démarrage/d'exécution des flux de travail parent et enfant. Dans cet exemple, le service parent démarre trois instances du service enfant en parallèle à l'aide de l'activité ParallelForEach, et se termine lorsque les trois instances sont exécutées. Vous pouvez également suivre les instances des services enfant/parent en cours d'exécution via le tableau de bord d'AppFabric.

    Notes

    Le flux de travail enfant est mis en veille pendant deux minutes après son démarrage. Pendant cette période, les instances parent et enfant deviennent inactives et sont conservées dans le magasin de persistance. Les événements d'exécution se produisent après cette même période.

Suppression de l'exemple

  1. Démarrez le Gestionnaire des services Internet (IIS). Cliquez sur Démarrer, Tous les programmes, Windows Server AppFabric, puis cliquez sur Gestionnaire des services Internet (IIS).

  2. Dans l'arborescence à gauche de la fenêtre, développez le nœud du serveur. Développez successivement Sites, puis Site Web par défaut.

  3. Cliquez sur le nœud SampleChildService, puis appuyez sur Suppr.

  4. Cliquez sur Oui pour confirmer la suppression de l'application sélectionnée.

  5. Cliquez sur le nœud SampleParentService, puis appuyez sur Suppr.

  6. Cliquez sur Oui pour confirmer la suppression de l'application sélectionnée.

  7. Si vous avez suivi les instructions de la partie Option 1 de la section « Exécution de l'exemple », vous devez également effectuer les actions suivantes :

    1. Cliquez sur le nœud ChildService, puis appuyez sur Suppr.

    2. Cliquez sur Oui pour confirmer la suppression de l'application sélectionnée.

    3. Cliquez sur le nœud ParentService, puis appuyez sur Suppr.

    4. Cliquez sur Oui pour confirmer la suppression de l'application sélectionnée.

Démontre

Deux options (dont les étapes sont décrites dans cette rubrique) sont envisageables pour exécuter cet exemple. La première option est préférable à la seconde car elle propose un aperçu complet de l'utilisation des activités WorkflowCallableSequence et CallWorkflowService dans le but d'appeler un flux de travail enfant à partir d'un flux de travail parent, ce qui constitue le principal objectif de cet exemple. L'option 2 ne prend en compte que la solution finalisée, c'est-à-dire une implémentation de la corrélation duplex durable prête à l'emploi, sans détailler la phase de conception.

L'option 1 de la section « Exécution de l'exemple » illustre l'utilisation des deux activités personnalisées d'un projet.

En premier lieu, le service de flux de travail enfant est créé. L'activité Sequential service par défaut est supprimée, puis remplacée par l'activité WorkflowCallableSequence. Cette activité est une fabrique de modèle d'activité qui, sur la base des entrées de l'utilisateur, génère et configure les activités de messagerie (Receive et Send) de manière à ce qu'elles prennent en charge la corrélation de rappel. Cette dernière requiert que le contexte de la demande contienne un jeton de contexte unique utilisé pour la corrélation vers le parent, ainsi que l'adresse de rappel à laquelle envoyer la notification d'exécution. L'activité Receive initialise un handle de corrélation de rappel à partir de la demande entrante, tandis que l'activité Send suit le handle pour envoyer la notification d'exécution au parent, à l'adresse de rappel dynamique transmise dans la demande initiale.

La logique WorkflowCallableSequence génère également les entrées web.config pour le service, les points de terminaison du service et du client, ainsi que les entrées de liaison requises.

L'étape suivante consiste à créer le service de flux de travail parent. La fabrique de modèle d'activité CallWorkflowService demande la définition du flux de travail enfant, examine sa configuration et, sur cette base, génère les activités de messagerie (Send et Receive) requises pour la communication de la corrélation duplex durable avec l'enfant. L'activité Send initialise la corrélation de rappel (logiquement, il s'agit de l'étape où le jeton de contexte unique est généré et transmis avec la demande envoyée au flux de travail enfant). L'activité Receive établit une corrélation entre les notifications d'exécution renvoyées par le flux de travail enfant à l'aide du même jeton de contexte (en établissant une corrélation avec le handle de corrélation initialisé par l'activité Send).

La logique CallWorkflowService génère également les entrées web.config pour le service, les points de terminaison du service et du client, ainsi que les entrées de liaison requises. Notez l'utilisation de l'attribut clientCallbackAddress dans la définition de la configuration de liaison personnalisée. Il s'agit de l'adresse qui sera incluse dans le message de demande envoyé au client afin qu'il puisse répondre de façon dynamique à l'appelant correct (le flux de travail parent dans ce cas)

L'option 2 de la section « Exécution de l'exemple » propose une solution duplex durable prête à l'emploi implémentée à l'aide de l'activité WorkflowCallableSequence du flux de travail enfant et de l'activité CallWorkflowService du flux de travail parent.

Le client appelle le service parent, qui à son tour démarre trois instances du service enfant en parallèle à l'aide de l'activité ParallelForEach. Le service enfant, après avoir reçu le message initial du service parent, est mis en veille pendant deux minutes (à l'aide d'une activité Delay). Après cette période, il renvoie une notification d'exécution au service parent. Le service parent se termine lorsque toutes les instances du service enfant ont été exécutées. Les instances enfant et parent consignent des entrées dans le journal des événements de l'application, en prenant comme source le dossier « Samples ». L'IU du client recherche cette source d'événements dans le journal pour afficher les événements d'exécution dans la zone de texte Instances de travail.

  2011-12-05