Configuration intégrée
Cette rubrique s'applique à Windows Workflow Foundation 4.
Cet exemple illustre l'utilisation et la configuration du magasin d'instances de workflow SQL. Le magasin d'instances de workflow SQL est une implémentation basée sur SQL d'un magasin d'instances. Il permet à une instance d'enregistrer et de charger son état vers et à partir d'une base de données SQL Server ou SQL Server Express.
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page de téléchargement pour télécharger tous les exemples WF et Windows Communication Foundation (WCF). Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Basic\Persistence\BuiltInConfiguration
|
Détails de l'exemple
Cet exemple est composé d'un workflow qui implémente un service de comptage. Une fois que la méthode de démarrage du service est appelée, le service compte de 0 à 59. Le compteur est incrémenté une fois toutes les 2 secondes. Après chaque compte, le workflow rend son état persistant.
Le workflow de comptage est auto-hébergé par un hôte de service de workflow. La méthode Main
du programme crée une instance de l'hôte de service de workflow qui héberge le workflow de comptage. Elle définit les points de terminaison sous lesquels le workflow de comptage peut être atteint. Après cela, il définit un comportement de magasin d'instances de workflow SQL, lequel est utilisé pour configurer le magasin d'instances de workflow SQL. Ensuite, le programme crée un client qui appelle la méthode de démarrage du workflow de comptage.
Une fois le programme démarré, le compteur commence automatiquement le comptage. Notez que le chargement de l'instance et la configuration du magasin d'instances de workflow SQL peut prendre quelques secondes. Pour plus d'informations sur le sujet suivant le magasin d'instances de workflow, consultez Magasin d'instances de workflow SQL.
Cet exemple est composé de deux parties :
InstanceStore1 montre comment SqlWorkflowInstanceStore est configuré à l'aide du code C# (voir Program.cs).
InstanceStore2 montre comment SqlWorkflowInstanceStore est configuré à l'aide de XML (voir App.config).
Les paramètres suivants sont disponibles pour configurer le comportement du magasin d'instances de workflow SQL :
Définissez
HostLockRenewalPeriod
. Ce temps définit l'intervalle dans lequel l'hôte renouvelle le verrou de propriété des instances qu'il s'exécute. Les informations de verrou sont stockées dans le magasin d'instances. Si la propriété n'est pas renouvelée pendant deux des intervalles définis dansHostLockRenewalPeriod
, l'instance est considérée comme étant abandonnée. Si un autre WorkflowServiceHost exécute le même workflow et est connecté au même magasin d'instances (sur le même ordinateur ou sur un ordinateur différent), il récupère cette instance. (La récupération d'instance est hors de portée pour cet exemple.)Définissez
RunnableInstancesDetectionPeriod
. Cette période définit l'intervalle dans lequel l'hôte recherche les instances qui sont devenues exécutables. Des instances peuvent devenir exécutables si l'un des événements suivants se produit :Un minuteur durable (Delay) expire.
Un autre hôte manque sa pulsation
HostLockRenewal
(par exemple, en raison d'un incident d'ordinateur) et l'instance est récupérée.
Définissez
InstanceCompletionAction
. Cette propriété, si elle a la valeur DeleteNothing, conserve les instances terminées dans le magasin d'instances ; si elle a la valeur DeleteAll, les instances sont supprimées du magasin une fois leur exécution terminée. Prenez note de ce qui suit :Remarque : Le fait d'arrêter l'hôte en appuyant sur ENTRÉE avant la fin du comptage ne termine pas l'instance de workflow. Définissez
InstanceLockedExceptionAction
. Ce paramètre définit ce qu'un hôte doit faire s'il veut charger une instance qui est verrouillée par un autre hôte. Les options suivantes sont disponibles :Si la valeur définie est NoRetry : permet de ne pas faire une nouvelle tentative de charge et de retourner un
InstanceLockedException
à l'hôte.Si la valeur définie est BasicRetry : permet de poursuivre la tentative de chargement de l'instance. Les nouvelles tentatives sont planifiées selon un algorithme linéaire simple (par exemple, réessayer toutes les 5 secondes).
Si la valeur définie est AggressiveRetry : permet de poursuivre la tentative de chargement de l'instance. Les tentatives sont planifiées selon un algorithme de réduction de puissance exponentiel agressif.
Définissez l'option Encodage. Ce paramètre définit la façon dont l'état de l'instance est stocké dans le magasin d'instances de workflow SQL. Les options suivantes sont disponibles :
L'état de l'instance est compressé à l'aide de l'algorithme de compression Gzip.
L'état de l'instance n'est pas compressé.
Pour utiliser cet exemple
Ouvrez une invite de commandes Visual Studio 2010 en tant qu'Administrateur si ces autorisations sont disponibles.
Accédez au répertoire de l'exemple (\WF\Basic\Persistence\BuiltInConfiguration\CS) et exécutez CreateInstanceStore.cmd.
Si les privilèges d'administrateur ne sont pas disponibles, créez un compte de connexion SQL Server. Accédez à
Security
, Connexions. Cliquez avec le bouton droit sur Connexions et créez une nouvelle connexion.Ajoutez votre utilisateur ACL au rôle SQL. Ouvrez Bases de données, InstanceStore, Sécurité. Cliquez avec le bouton droit sur Utilisateurs, puis sélectionnez Nouveaux utilisateurs. Affectez à Nom d'accès l'utilisateur créé dans l'étape précédente. Ajoutez l'utilisateur à l'appartenance au rôle de base de données System.Activities.DurableInstancing.InstanceStoreUsers (et autres). Notez qu'il est possible que l'utilisateur existe déjà (par exemple, l'utilisateur dbo).
Ouvrez le fichier InstanceStore.sln dans Visual Studio 2010 et générez la solution en appuyant sur F6.
Dans l'Explorateur Windows, accédez au répertoire \bin\debug approprié de l'exemple (\WF\Basic\Persistence\BuiltInConfiguration\cs\InstanceStore(1 ou 2)\bin\debug), cliquez avec le bouton droits sur InstanceStore.exe, puis sélectionnez Exécuter en tant qu'administrateur. Cet exemple doit être exécuté avec des privilèges d'administrateur car il ouvre un écouteur de canal.
Si vous avez créé le magasin d'instances dans une base de données autre qu'une installation locale de SQL Server Express, vous devez mettre à jour, dans l'exemple, la chaîne de connexion à la base de données (
const string ConnectionString
dans le fichier Program.cs du projet InstanceStore1, et l'attributconnectionString
dans le fichier App.config du projet InstanceStore2) et recompiler l'exemple.
Pour vérifier que l'exemple s'exécute correctement
Pendant que l'exemple est en cours d'exécution, démarrez SQL Server Management Studio.
Dans l'Explorateur d'objets, sélectionnez Bases de données, InstanceStore, Tables, puis System.Activities.DurableInstancing.InstanceTable.
Cliquez avec le bouton droit sur InstanceTable, puis sélectionnez Sélectionner les 1000 lignes du haut.
Vous pouvez observer qu'il y a une nouvelle entrée et que la valeur Expiration du verrou change toutes les 5 secondes (cliquez sur le bouton Exécuter de la barre des tâches pour actualiser la requête). Cela est dû à l'affectation de la valeur 5 à la propriété Host Lock Renewal Period.
Vous pouvez observer qu'une fois le comptage terminé, l'entrée est supprimée de la table d'instance. Cela est dû à l'affectation de la valeur DeleteAll à la propriété Instance Completion Action.
Appuyez sur ENTRÉE pour fermer l'application hôte du workflow et constatez que LockOwnersTable est supprimé.
Pour désinstaller l'exemple
- Exécutez RemoveInstanceStore.cmd dans le répertoire de l'exemple (\WF\Basic\Persistence\BuiltInConfiguration).
Remarque : |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WF\Basic\Persistence\BuiltInConfiguration
|