Sequential Workflow Service, exemple
Cet exemple montre comment créer un service de workflow à l'aide d'un workflow séquentiel. Cet exemple indique comment créer un contrat de service, une méthode de création de service qui est référencée comme mode de workflow prioritaire. L'exemple crée un contrat ICalculator
et est implémenté dans le workflow comme à mesure que le workflow est généré.
Remarque : |
---|
Cet exemple requiert l'installation de .NET Framework version 3.5 pour être généré et exécuté. Visual Studio 2008 est nécessaire pour l'ouverture des fichiers projet et solution. |
Implémenter la calculatrice comme un workflow présente les avantages suivants :
- Vous pouvez démarrer un processus de longue durée qui enregistre automatiquement l'état du workflow. Cela signifie que lorsque vous redémarrez le service de workflow, le client peut communiquer avec la même instance du service.
- Le protocole au niveau de l'application du contrat est appliqué. Si une opération est appelée de façon inattendue sur ce service, le workflow déclenche une exception.
Dans ce workflow, l'activité PowerOn
Receive a une propriété nommée CanCreateInstance
dont la valeur est true. Cela signifie qu'une instance de ce service est créée lorsque le client appelle l'opération PowerOn
. Le client reçoit le contexte dans le cadre de la réponse pour cette opération. À partir de ce point, toute autre opération du workflow peut être appelée. Pour chaque opération que le client appelle, le contexte est envoyé sur le canal, et par conséquent, l'opération peut être acheminée à l'instance appropriée. Lorsque l'opération PowerOff
est appelée, une valeur booléenne est définie ; elle a pour effet de faire quitter la boucle while au workflow.
L'exemple de code suivant affiche le modèle d'appel WorkflowServiceHost
implémenté dans le fichier Program.cs dans le projet de service.
WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();
Dans l'exemple de code précédent, le constructeur de WorkflowServiceHost prend le type de workflow comme entrée et l'ouvre pour écouter les messages.
Cet exemple contient également une application cliente qui appelle des opérations sur le service de calculatrice. L'application cliente est un workflow séquentiel et effectue une série d'appels d'opération. Le workflow client utilise des activités d'envoi pour appeler des opérations sur le workflow. Le projet client contient des références au service ICalculator
que l'activité Send peut utiliser pour afficher l'interface à partir de laquelle vous pouvez sélectionner les opérations à appeler.
Pour configurer, générer et exécuter le projet
Suivez les instructions d'installation répertoriées dans One-time Setup Procedure for Windows Communication Foundation Samples.
Pour installer les fournisseurs de persistance, exécutez le script CreateStores.cmd indiqué dans la rubrique One-Time Setup Procedure for the Windows Communication Foundation Samples.
Cet exemple utilise la base de données NetFx35Samples_ServiceWorkflowStore. Il n'inclut pas de magasin de persistances pour le workflow client. Cet exemple suppose que vous utilisez SQL Server Express où il installe les bases de données. Si vous préférez installer les bases de données dans SQL Server, modifiez les chaînes de connexion dans le fichier App.config.
Si vous ne souhaitez pas utiliser de fournisseurs de persistance, commentez la section
<WorkflowRuntime>
des fichiers App.config.Exécutez l'exemple en tant qu'utilisateur du groupe Administrateurs. Si vous utilisez Windows Vista, cliquez avec le bouton droit de la souris sur le fichier exécutable client, puis cliquez sur Exécuter en tant qu'administrateur.
Une fois que l'application commence à s'exécuter, le workflow client envoie un jeu d'opérations de calculatrice puis termine le workflow. Vous pouvez appuyer sur ENTRÉE pour envoyer un autre jeu d'opérations de calculatrice.
Pour tester la nature de longue durée de ce service, mettez un point d'arrêt dans l'application cliente. Lorsque vous atteignez le point d'arrêt dans Visual Studio, fermez puis redémarrez l'application de service. Diffusez le point d'arrêt sur le client. Le workflow client s'adresse à la même instance de workflow sur le service. Vous pouvez également scinder l'exemple en deux solutions pour tester le recyclage du service.
Exécution de l'exemple sur des ordinateurs distincts
Modifiez les fichiers de configuration du service et du client en n'oubliant de changer le nom du serveur figurant dans l'adresse du point de terminaison. Remplacez la valeur
localhost
utilisée comme nom de serveur par le nom de l'ordinateur sur lequel le service doit être exécuté.Le service utilisant le port 8888, vous devez ouvrir ce port dans le pare-feu. Sélectionnez le panneau de configuration de Windows, puis cliquez sur Pare-feu Windows. Cliquez sur Ajouter un port, puis ajoutez le port 8888. Vous pouvez également exécuter le service sur le port par défaut. Pour ce faire, supprimez :8888 de l'adresse du point de terminaison.
Modifiez le fichier de configuration du client, puis ajoutez l'élément suivant comme enfant de l'élément
<endpoint>
.<identity> <UserPrincipalName value=”*@<Domain Name in which your server is running” /> </identity>
Pour déterminer le nom de domaine, démarrez le service depuis l'ordinateur sur lequel vous projetez de l'exécuter. Dans une fenêtre d'invite de commandes de l'autre ordinateur, exécutez la commande suivante.
svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc
Cette commande génère un fichier .cs ainsi qu'un fichier output.config. Dans l'élément
<endpoint>
du fichier de configuration du client copiez l'élément<identity>
.