Partager via


Requêtes et contrôles d'instances

Cet exemple montre l'utilisation des fournisseurs de requête et de contrôle des magasins de persistance. Le fournisseur de requête expose une API C# qui permet de rechercher les instances stockées dans un magasin de persistance. Le fournisseur de contrôle expose une API C# qui permet d'émettre des commandes de contrôle (interruption, reprise, annulation, arrêt et suppression) sur une instance stockée dans un magasin de persistance.

Cet exemple contient un service de de test WF, une application de console Windows pour la recherche des instances et une application de console Windows pour le contrôle des instances.

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

  • Internet Information Services (IIS) version 7.0 ;

  • magasin de persistance initialisé ;

  • Visual Studio 2010 et Windows Server AppFabric sur le même ordinateur.

Emplacement et fichiers de l'exemple

Le document Lisez-moi se trouve dans le répertoire <samples>\Samples\Hosting\InstanceQueryAndControl.

Tous les fichiers nécessaires à l'exécution de cet exemple se trouvent dans le répertoire <samples>\Samples\Hosting\InstanceQueryAndControl:

  • Le dossier InstanceControl contient les fichiers requis pour l'exemple d'application de contrôle d'instances.

  • Le dossier InstanceQuery contient les fichiers requis pour l'exemple d'application de requête d'instances.

  • Le dossier TestWorkflow contient les fichiers requis pour l'exemple de flux de travail.

  • Le fichier de solution InstanceQueryAndControl.sln définit la solution qui crée les exemples d'artefacts.

Configuration et exécution de l'exemple

  1. Créez un magasin de persistance si vous ne l'avez pas déjà fait lors de l'installation de Windows Server AppFabric.

    1. Exécutez C:\Windows\System32\AppFabric\Microsoft.ApplicationServer. Configuration.exe en tant qu'administrateur. Dans l'étape Configurer le composant Worker, activez la case à cocher Définir la configuration de la persistance. Sélectionnez sqlStoreProvider comme fournisseur de persistance, puis cliquez sur Configurer.

    2. Dans la fenêtre Configuration du magasin de persistance SQL, activez les cases à cocher Ajouter l'enregistrement du magasin de persistance au fichier Web.config racine et Initialiser le magasin de persistance. Spécifiez le nom de la base de données du magasin de persistance comme ApplicationServerWorkflowInstanceStore. Cliquez sur OK pour créer une base de données de magasin de persistance sous le nom spécifié. Si vous choisissez un autre nom pour la base de données, l'exemple de code doit être modifié (voir ci-dessous).

  2. Si vous exécutez cet exemple sur un système 64 bits, copiez le fichier C:\Windows\System32\AppFabric\Microsoft.ApplicationServer.StoreManagement.dll dans le dossier de votre projet.

    Notes

    Vous allez utiliser ce chemin d'accès à l'étape 3.

  3. Générez la solution.

    1. Ouvrez Visual Studio 2010 en tant qu'administrateur. Cliquez sur Démarrer --> Tous les programmes --> Microsoft Visual Studio 2010. Cliquez avec le bouton droit sur Microsoft Visual Studio 2010, puis sélectionnez Exécuter en tant qu’administrateur.

    2. Ouvrez l'exemple de projet. Dans Visual Studio, cliquez sur Fichier --> Ouvrir --> Projet/Solution. Sélectionnez l'exemple de fichier de solution <samples>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln. À l'ouverture du fichier, Visual Studio indique que l'URL IIS locale de l'exemple de service n'a pas encore été créée. Confirmez la création du nouveau répertoire virtuel.

    3. Si vous exécutez cet exemple sur un système 64 bits, suivez les étapes ci-après pour InstanceQuery et le projet InstanceControl. À la ligne 17 du fichier Program.cs, remplacez le chemin d'accès au fichier Microsoft.ApplicationServer.StoreManagement.dll par l'emplacement où vous avez copié le fichier lors de l'étape 2.

    4. Cet exemple part du principe que le flux de travail persiste dans la base de données de persistance ApplicationServerWorkflowInstanceStore hébergée par SQL Express. Vous pouvez modifier le nom de base de données et l'instance SQL server aux lignes 44 et 45 de Program.cs du projet InstanceControl, et aux lignes 37 et 38 de Program.cs du projet InstanceQuery.

    5. Appuyez sur F6 pour générer la solution. Cette action déploie automatiquement l'application TestWorkflow dans IIS.

  4. Configurez l'application TestWorkflow.

    1. Ouvrez le Gestionnaire des services Internet (IIS). Cliquez sur Démarrer -->Panneau de configuration->Outils d’administration --> Gestionnaire des services Internet (IIS).

    2. Définissez le pool d'applications (AppPool) approprié et activez le protocole net.pipe pour le site.

      • Dans la fenêtre Connexions d'IIS, sélectionnez le nœud <ordinateur>/Sites/Site Web par défaut.

      • Dans la fenêtre Actions d'IIS, cliquez sur Paramètres avancés.

      • Modifiez le paramètre Pool d'applications sur la valeur ASP.NET v4.0.

      • Modifiez le paramètre Protocoles activés sur la valeur http,net.pipe. Attention : Il ne doit pas y avoir d'espace entre la virgule et net.pipe.

      • Cliquez sur OK.

    3. Définissez le pool d'applications (AppPool) approprié et activez le protocole net.pipe pour l'application.

      • Dans la fenêtre Connexions d'IIS, sélectionnez le nœud <ordinateur>/Sites/Site Web par défaut/TestWorkflow.

      • Dans la fenêtre Actions d'IIS, cliquez sur Paramètres avancés.

      • Modifiez le paramètre Pool d'applications sur la valeur ASP.NET v4.0.

      • Modifiez le paramètre Protocoles activés sur la valeur http,net.pipe. Attention : Il ne doit pas y avoir d'espace entre la virgule et net.pipe.

      • Cliquez sur OK.

  5. Créez les instances du service TestService.

    1. Ouvrez le client de test WCF.

      • Dans la fenêtre Connexions du Gestionnaire IIS, sélectionnez le nœud <ordinateur>/Sites/Site Web par défaut/TestWorkflow.

      • Cliquez avec le bouton droit sur TestWorkflow, puis sélectionnez Basculer vers l'affichage du contenu.

      • Cliquez avec le bouton droit sur TestService.xamlx, puis sélectionnez Parcourir. Un navigateur Web démarre et affiche la page d'accueil du service TestService.

      • Ouvrez le client de test WCF comme suit : Ouvrez le client de test WCF. Cliquez sur Démarrer --> Tous les programmes --> Microsoft Visual Studio 2010 --> Visual Studio Tools --> Invite de commande Visual Studio (2010). À l'invite de commande, entrez la commande wcftestclient.

      • Dans la fenêtre d'URL du navigateur Web, copiez l'URL de TestService (par exemple, « https://localhost/TestWorkflow/TestService.xamlx »). Dans le client de test WCF, cliquez avec le bouton droit sur Mes projets de service, puis sélectionnez Ajouter un service. Lorsque vous êtes invité à entrer l'adresse du point de terminaison, collez l'URL du service TestService.

    2. Appelez le service TestService comme suit :

      • Dans la fenêtre Client de test WCF, double-cliquez sur le nœud Invoke() sous le nœud IService (BasicHttpBinding_IService).

      • Sous l'onglet Appeler, cliquez sur le champ (null) dans la colonne Valeur. Remplacez la sélection (null) par System.Nullable<System.Int32>. Développez le nœud int dans la colonne Nom. Une nouvelle ligne apparaît avec la valeur 0.

      • Cliquez sur Appeler. Cette action crée une instance du service TestService exécutée pendant 10 minutes.

      • Modifiez la valeur sur 1 et cliquez sur Appeler. Cette action crée une instance du service TestService exécutée immédiatement.

      • Modifiez la valeur sur 2 et cliquez sur Appeler. Cette action crée une instance du service TestService qui génère une exception et une interruption.

  6. Recherchez des instances.

    1. Dans Visual Studio, vérifiez qu'InstanceQuery correspond au projet de démarrage par défaut, puis appuyez sur F5 pour rechercher des instances. Une fenêtre de console s'ouvre et affiche les trois instances créées lors de l'étape 5.b.

    2. Vous pouvez également exécuter la commande InstanceQuery à l'invite de commande :

      • Ouvrez une invite de commandes. Exécutez la commande <samples>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group].
  7. Contrôlez les instances

    1. À l'invite de commande, exécutez la commande <samples>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete]. Utilisez le GUID de 20 caractères de toute instance créée précédemment.

Suppression de l'exemple

  1. Supprimez du magasin de persistance toutes les instances du service TestWorkflow. Ouvrez une fenêtre de console Admin, puis tapez les commandes suivantes :

    > powershell
    > import-module applicationServer
    > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
    

Démontre

L'exemple contient trois projets :

  • TestWorkflow implémente un service WF hébergé dans IIS. Chaque appel du service crée une nouvelle instance du service. Lorsque l'utilisateur appelle le service via le client de test WCF, il lui transmet un paramètre. Selon le paramètre transmis, l'instance est exécutée pendant 10 minutes, est terminée immédiatement ou génère une exception.

  • InstanceQuery implémente une application de console qui émet une requête sur le magasin de persistance et affiche les résultats à l'écran. L'utilisateur doit spécifier le type et les paramètres de requête, ainsi que la chaîne de connexion du magasin de persistance.

  • InstanceControl implémente une application de console qui émet une commande de contrôle sur une instance résidant dans un magasin de persistance. L'utilisateur doit spécifier le type de commande, l'ID d'instance et la chaîne de connexion du magasin de persistance.

Exemple d'application de requête d'instances

L'exemple d'application de requête d'instances montre les fonctionnalités et l'API du fournisseur de requête AppFabric. Le fournisseur de requête permet à l'utilisateur d'émettre trois types de requêtes :

  • obtenir la liste des instances résidant dans un magasin de persistance et dont les propriétés correspondent à la requête. Cette requête renvoie un tableau d'objets instanceInfo.

  • obtenir le nombre d'instances résidant dans un magasin de persistance et dont les propriétés correspondent à la requête. Cette requête renvoie une valeur Int32.

  • obtenir le nombre d'instances résidant dans un magasin de persistance et dont les propriétés correspondent à la requête, puis les regrouper selon des catégories définies. Cette requête renvoie une valeur énumérée de type groupingResult.

Pour chaque type de requête, le fournisseur de requête fournit une API asynchrone qui exécute la requête. Le type d'entrée et de retour varie selon le type de requête. Pour tous les types de requêtes, l'utilisateur peut spécifier plusieurs filtres de requête. L'exemple les définit tous sur la valeur Null, ce qui signifie que la requête sélectionne toutes les instances se trouvant dans le magasin. Outre les paramètres de filtre, l'utilisateur doit fournir la chaîne de connexion du magasin de persistance. L'exemple part du principe que les instances résident dans le magasin DefaultSqlWorkflowInstanceStore. De même, il suppose que la base de données utilise la sécurité intégrée de Windows pour authentifier l'accès à la base de données.

Dans le cadre d'une requête visant à obtenir une liste d'instances, l'utilisateur doit spécifier le nombre maximal d'instances renvoyées et les modalités de tri des instances. Actuellement, le fournisseur de requête peut utiliser le critère LastUpdatedTime ou renvoyer une liste non triée.

Dans le cadre d'une requête visant à obtenir un nombre groupé d'instances, l'utilisateur doit spécifier les paramètres de regroupement. Ces paramètres sont fournis au format List<GroupingMode>. Le premier élément définit le groupe principal, tandis que les éléments suivants définissent un sous-groupe.

Exemple d'application de contrôle d'instances

L'exemple d'application de contrôle d'instances montre les fonctionnalités et l'API du fournisseur de contrôle AppFabric. Le fournisseur de contrôle permet à l'utilisateur d'émettre une commande (interruption, reprise, annulation, arrêt ou suppression) sur une instance. Outre le type de commande et l'ID d'instance, l'utilisateur doit fournir les identificateurs de service SiteName, RelativeApplicationPath et VirtualPath Ces paramètres permettent au service WMS de calculer le point de terminaison de contrôle de l'instance de service. (Les identificateurs de service sont requis uniquement pour les commandes Suspend, Resume, Cancel et Terminate. La commande Delete n'est pas émise sur le point de terminaison de contrôle mais directement dans la base de données.)

Outre les paramètres de filtre, l'utilisateur doit fournir la chaîne de connexion du magasin de persistance. L'exemple part du principe que les instances résident dans le magasin DefaultSqlWorkflowInstanceStore. De même, il suppose que la base de données utilise la sécurité intégrée de Windows pour authentifier l'accès à la base de données.

Notez que l'exemple d'application de contrôle d'instances place les commandes Suspend, Resume, Cancel et Terminate dans la file d'attente de commandes du magasin de persistance et celles-ci sont exécutées ultérieurement. Utilisez l'exemple d'application de requête d'instances pour consulter les détails relatifs à l'exécution de la commande.

Notez qu'une commande pour une instance peut uniquement être placée dans une file d'attente si aucune autre commande n'est déjà en attente pour cette instance.

Le tableau suivant décrit les effets des commandes lorsqu'elles sont émises sur des instances dans différents états.

État actuel Interrompre Reprendre Cancel Terminate Supprimer

Running

Suspend l'instance

Pas d'opération

Annule l'instance

Arrête l'instance

Supprime l'instance du magasin de persistance

Suspended

Pas d'opération

Reprend l'instance

Annule l'instance

Arrête l'instance

Supprime l'instance du magasin de persistance

Completed

Non autorisé

Non autorisé

Non autorisé

Non autorisé

Supprime l'instance du magasin de persistance

Avertissement

La suppression des instances en cours d'exécution du magasin de persistance peut entraîner un comportement imprévisible. Cela n’est pas recommandé.

  2011-12-05