Guide pratique pour activer la persistance SQL dans les workflows et les services de workflow
Cet article décrit comment configurer la fonctionnalité de magasin d'instances de workflow SQL pour activer la persistance pour vos workflows et services de workflow à la fois par programmation et en utilisant un fichier de configuration.
Windows Server AppFabric simplifie le processus de configuration de la persistance. Pour plus d’informations, consultez Configuration AppFabric Persistance.
Avant d’utiliser la fonctionnalité de magasin d’instances de workflow SQL, créez une base de données que la fonctionnalité utilise pour rendre les instances de workflow persistantes. Le programme d'installation de .NET Framework 4.6.1 copie les fichiers de script SQL associés à la fonctionnalité de magasin d'instances de workflow SQL dans le dossier %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN. Exécutez ces fichiers de script sur une base de données SQL Server 2005 ou SQL Server 2008 que le magasin d'instances de workflow SQL doit utiliser pour rendre les instances de workflow persistantes. Exécutez d'abord le fichier SqlWorkflowInstanceStoreSchema.sql, puis le fichier SqlWorkflowInstanceStoreLogic.sql.
Notes
Pour nettoyer la base de données de persistance afin d'en avoir une nouvelle, exécutez les scripts dans %WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN dans l'ordre suivant.
- SqlWorkflowInstanceStoreSchema.sql
- SqlWorkflowInstanceStoreLogic.sql
Important
Si vous ne créez pas de base de données de persistance, la fonctionnalité de magasin d’instances de workflow SQL lève une exception semblable à la suivante lorsqu’un hôte essaie de rendre des workflows persistants.
System.Data.SqlClient.SqlException : Impossible de trouver la procédure stockée « System.Activities.DurableInstancing.CreateLockOwner »
Les sections suivantes décrivent comment activer la persistance pour les workflows et les services de workflow à l'aide du magasin d'instances de workflow SQL. Pour plus d’informations sur les propriétés du magasin d’instances de workflow SQL, consultez Propriétés du magasin d’instances de workflow SQL.
Activer la persistance pour les workflows auto-hébergés qui utilisent WorkflowApplication
Vous pouvez activer la persistance pour les workflows auto-hébergés qui utilisent WorkflowApplication par programmation à l'aide du modèle d'objet SqlWorkflowInstanceStore. La procédure suivante contient les étapes pour effectuer cette opération.
Ajoutez une référence à System.Activities.DurableInstancing.dll.
Ajoutez l'instruction suivante en haut du fichier source après les instructions « using » existantes.
using System.Activities.DurableInstancing;
Construisez un SqlWorkflowInstanceStore et affectez-le au InstanceStore du WorkflowApplication, comme illustré dans l'exemple de code suivant.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI"); WorkflowApplication wfApp = new WorkflowApplication(new Workflow1()); wfApp.InstanceStore = store;
Notes
Selon votre édition de SQL Server, le nom du serveur de chaîne de connexion peut être différent.
Appelez la méthode Persist sur l'objet WorkflowApplication pour rendre un workflow persistant ou la méthode Unload pour rendre persistant et décharger un workflow. Vous pouvez également gérer l'événement PersistableIdle déclenché par l'objet WorkflowApplication et retourner un membre approprié (Persist ou Unload) de PersistableIdleAction.
wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return PersistableIdleAction.Persist; };
Notes
Consultez l’étape Guide pratique pour créer et exécuter un workflow de longue durée du Tutoriel de démarrage afin d’obtenir des instructions pas à pas.
Activer la persistance pour les services de workflow auto-hébergés qui utilisent WorkflowServiceHost
Vous pouvez activer la persistance pour les services de workflow auto-hébergés qui utilisent WorkflowServiceHost par programmation à l'aide de la classe SqlWorkflowInstanceStoreBehavior ou DurableInstancingOptions.
Utiliser la classe SqlWorkflowInstanceStoreBehavior
La procédure suivante contient les étapes pour utiliser la classe SqlWorkflowInstanceStoreBehavior afin d'activer la persistance pour les services de workflow auto-hébergés.
Ajoutez une référence à System.ServiceModel.dll.
Ajoutez l'instruction suivante en haut du fichier source après les instructions « using » existantes.
using System.ServiceModel.Activities.Description;
Créez une instance du
WorkflowServiceHost
et ajoutez des points de terminaison pour le service de workflow.WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress)); host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
Construisez un objet
SqlWorkflowInstanceStoreBehavior
et définissez les propriétés de l'objet de comportement.SqlWorkflowInstanceStoreBehavior instanceStoreBehavior = new SqlWorkflowInstanceStoreBehavior(connectionString); instanceStoreBehavior.HostLockRenewalPeriod = new TimeSpan(0, 0, 5); instanceStoreBehavior.InstanceCompletionAction = InstanceCompletionAction.DeleteAll; instanceStoreBehavior.InstanceLockedExceptionAction = InstanceLockedExceptionAction.AggressiveRetry; instanceStoreBehavior.InstanceEncodingOption = InstanceEncodingOption.GZip; instanceStoreBehavior.RunnableInstancesDetectionPeriod = new TimeSpan("00:00:02"); host.Description.Behaviors.Add(instanceStoreBehavior);
Ouvrez l'hôte de service de workflow.
host.Open();
Utiliser la propriété DurableInstancingOptions
Lorsque le SqlWorkflowInstanceStoreBehavior
est appliqué, le DurableInstancingOptions.InstanceStore
sur le WorkflowServiceHost
a pour valeur l'objet SqlWorkflowInstanceStore
créé à l'aide des valeurs de configuration. Vous pouvez effectuer la même opération par programmation pour définir la propriété DurableInstancingOptions du WorkflowServiceHost
sans utiliser la classe SqlWorkflowInstanceStoreBehavior
, comme illustré dans l'exemple de code suivant.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Activer la persistance pour les services de workflow hébergés par le service d'activation de processus Windows qui utilisent WorkflowServiceHost à l'aide d'un fichier de configuration
Vous pouvez activer la persistance pour les services de workflow auto-hébergés ou hébergés par le service d'activation des processus Windows (WAS) à l'aide d'un fichier de configuration. Un service de workflow hébergé par le service d'activation de processus Windows utilise WorkflowServiceHost de la même façon que les services de workflow auto-hébergés.
SqlWorkflowInstanceStoreBehavior
est un comportement de service qui vous permet de changer facilement les propriétés du magasin d’instances de workflow SQL via la configuration XML. Pour les services de workflow hébergés par le service d'activation de processus Windows, utilisez le fichier Web.config. L'exemple de configuration suivant indique comment configurer le magasin d'instances de workflow SQL en utilisant l'élément de comportement sqlWorkflowInstanceStore
dans un fichier de configuration.
<serviceBehaviors>
<behavior name="">
<sqlWorkflowInstanceStore
connectionString="Data Source=(local);Initial Catalog=DefaultPersistenceProviderDb;Integrated Security=True;Async=true"
instanceEncodingOption="GZip | None"
instanceCompletionAction="DeleteAll | DeleteNothing"
instanceLockedExceptionAction="NoRetry | BasicRetry |AggressiveRetry"
hostLockRenewalPeriod="00:00:30"
runnableInstancesDetectionPeriod="00:00:05" />
</behavior>
</serviceBehaviors>
Important
Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.
Si vous ne définissez pas de valeurs pour la propriété connectionString
ou connectionStringName
, le magasin d'instances de workflow SQL utilise la chaîne de connexion DefaultSqlWorkflowInstanceStoreConnectionString
nommée par défaut.
Lorsque le SqlWorkflowInstanceStoreBehavior
est appliqué, le DurableInstancingOptions.InstanceStore
sur le WorkflowServiceHost
a pour valeur l'objet SqlWorkflowInstanceStore
créé à l'aide des valeurs de configuration. Vous pouvez effectuer la même opération par programmation pour utiliser le SqlWorkflowInstanceStore
avec WorkflowServiceHost
sans utiliser l'élément de comportement de service.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Important
Il est recommandé de ne pas stocker d'informations sensibles, telles que les noms d'utilisateur et mots de passe, dans le fichier Web.config. Si vous stockez des informations sensibles dans le fichier Web.config, vous devez sécuriser l'accès au fichier Web.config à l'aide des listes de contrôle d'accès (ACL) du système de fichiers. De plus, vous pouvez également sécuriser les valeurs de configuration dans un fichier config, comme indiqué dans Chiffrement des informations de configuration à l’aide de la configuration protégée.
Éléments Machine.config liés à la fonctionnalité de magasin d'instances de workflow SQL
L'installation de .NET Framework 4.6.1 ajoute l'élément d'extension de comportement suivant au fichier Machine.config afin que vous puissiez utiliser l'élément de comportement du service <sqlWorkflowInstanceStore>
dans le fichier de configuration pour configurer la persistance pour vos services.
<configuration>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="sqlWorkflowInstanceStore" type="System.Activities.DurableInstancing.SqlWorkflowInstanceStoreElement, System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>