Vorgehensweise: Aktivieren der SQL-Persistenz für Workflows und Workflowdienste
Dieses Thema gilt für Windows Workflow Foundation 4.
In diesem Thema wird beschrieben, wie Sie die Funktion "SQL-Workflowinstanzspeicher" konfigurieren, um die Persistenz für Workflows und Workflowdienste sowohl programmgesteuert als auch mithilfe einer Konfigurationsdatei zu aktivieren. Erstellen Sie vor dem Verwenden der Funktion "SQL-Workflowinstanzspeicher" eine Datenbank erstellen, die die Funktion zum Beibehalten von Workflowinstanzen verwendet. Das .NET Framework 4-Setupprogramm kopiert die SQL-Skriptdateien, die der Funktion "SQL-Workflowinstanzspeicher" zugeordnet sind, in den Ordner "%WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN". Führen Sie diese Skriptdateien für eine SQL Server 2005- oder SQL Server 2008-Datenbank aus, die der SQL-Workflowinstanzspeicher zum Beibehalten von Workflowinstanzen verwenden soll. Führen Sie zuerst die Datei "SqlWorkflowInstanceStoreSchema.sql" und dann die Datei "SqlWorkflowInstanceStoreLogic.sql" aus.
Hinweis: |
---|
Um die Persistenzdatenbank so zu bereinigen, dass sie eine neue Datenbank aufweist, führen Sie die Skripts in "%WINDIR%\Microsoft.NET\Framework\v4.xxx\SQL\EN" in der folgenden Reihenfolge aus.
|
Hinweis: |
---|
Wenn Sie keine Persistenzdatenbank erstellen, löst die Funktion "SQL-Workflowinstanzspeicher" eine Ausnahme wie unten angegeben aus, sobald ein Host versucht, Workflows beizubehalten. System.Data.SqlClient.SqlException: Die gespeicherte Prozedur "System.Activities.DurableInstancing.CreateLockOwner" wurde nicht gefunden. |
In den folgenden Abschnitten wird beschrieben, wie Sie die Persistenz für Workflows und Workflowdienste mithilfe des SQL-Workflowinstanzspeichers aktivieren. Weitere Informationen über zu den Eigenschaften des SQL-Workflowinstanzspeichers finden Sie unter Eigenschaften des SQL-Workflowinstanzspeichers.
Aktivieren der Persistenz für selbst gehostete Workflows, die WorkflowApplication verwenden
Sie können die Persistenz für selbst gehostete Workflows aktivieren, die WorkflowApplication programmgesteuert nutzen, indem Sie das SqlWorkflowInstanceStore-Objektmodell verwenden. Die folgende Vorgehensweise enthält die dafür erforderlichen Schritte.
So aktivieren Sie Persistenz für selbst gehostete Workflows
Fügen Sie einen Verweis zu "System.Activites.DurableInstancing.dll" hinzu.
Fügen Sie oben in der Quelldatei nach den vorhandenen using-Anweisungen die folgende Anweisung hinzu.
using System.Activities.DurableInstancing;
Erstellen Sie einen SqlWorkflowInstanceStore, und weisen Sie ihn demInstanceStore der WorkflowApplication wie im folgenden Codebeispiel dargestellt zu.
SqlWorkflowInstanceStore store = new SqlWorkflowInstanceStore("Server=.\\SQLEXPRESS;Initial Catalog=Persistence;Integrated Security=SSPI"); WorkflowApplication wfApp = new WorkflowApplication(new Workflow1()); wfApp.InstanceStore = store;
Hinweis: Abhängig von der SQL Server-Version kann der Servername der Verbindungszeichenfolge abweichen. Rufen Sie die Persist-Methode für das WorkflowApplication-Objekt auf, um einen Workflow beizubehalten, oder die Unload-Methode, um einen Workflow beizubehalten und zu entladen. Sie können auch das vom WorkflowApplication-Objekt ausgelöste PersistableIdle-Ereignis behandeln und den entsprechenden Member (Persist oder Unload) von PersistableIdleAction zurückgeben.
wfApp.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e) { return PersistableIdleAction.Persist; };
Hinweis: |
---|
Im Beispiel Beibehalten einer Workflowanwendung unter Persistenz finden Sie ein Beispiel zum Aktivieren der Persistenz für Workflows mithilfe des SqlWorkflowInstanceStore; im Schritt Vorgehensweise: Erstellen und Ausführen eines Workflows mit langer Laufzeit des Lernprogramm "Erste Schritte " erhalten Sie schrittweise Anweisungen. |
Aktivieren der Persistenz für selbst gehostete Workflowdienste, die WorkflowServiceHost verwenden
Sie können die Persistenz für selbst gehostete Workflowdienste, die WorkflowServiceHost verwenden, mithilfe der SqlWorkflowInstanceStoreBehavior-Klasse oder der DurableInstancingOptions-Klasse programmgesteuert aktivieren.
Verwenden der SqlWorkflowInstanceStoreBehavior-Klasse
Die folgende Vorgehensweise enthält Schritte zum Verwenden der SqlWorkflowInstanceStoreBehavior-Klasse zur Aktivierung der Persistenz für selbst gehostete Workflowdienste.
So aktivieren Sie die Persistenz mit SqlWorkflowInstanceStoreBehavior
Fügen Sie einen Verweis zu "System.ServiceModel.dll" hinzu.
Fügen Sie oben in der Quelldatei nach den vorhandenen using-Anweisungen die folgende Anweisung hinzu.
using System.ServiceModel.Activities.Description;
Erstellen Sie eine Instanz von
WorkflowServiceHost
, und fügen Sie Endpunkte für den Workflowdienst hinzu.WorkflowServiceHost host = new WorkflowServiceHost(new CountingWorkflow(), new Uri(hostBaseAddress)); host.AddServiceEndpoint("ICountingWorkflow", new BasicHttpBinding(), "");
Erstellen Sie ein
SqlWorkflowInstanceStoreBehavior
-Objekt, und legen Sie Eigenschaften des Verhaltensobjekts fest.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);
Öffnen Sie den Workflowdiensthost.
host.Open();
Hinweis: |
---|
Im Beispiel Integrierte Konfiguration unter Persistenz finden Sie ein Beispiel für die Aktivierung der Persistenz für Workflowdienste mithilfe der SqlWorkflowInstanceStoreBehavior -Klasse.
|
Verwenden der DurableInstancingOptions-Eigenschaft
Wenn SqlWorkflowInstanceStoreBehavior
angewendet wird, wird DurableInstancingOptions.InstanceStore
auf dem WorkflowServiceHost
auf das SqlWorkflowInstanceStore
-Element festgelegt, das anhand der Konfigurationswerte erstellt wurde. Dies können Sie auch programmgesteuert erreichen, um die DurableInstancingOptions-Eigenschaft von WorkflowServiceHost
ohne Verwendung der SqlWorkflowInstanceStoreBehavior
-Klasse festzulegen, wie im folgenden Codebeispiel dargestellt.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Aktivieren der Persistenz für per WAS gehostete Workflowdienste, die WorkflowServiceHost verwenden, mithilfe einer Konfigurationsdatei
Sie können die Persistenz für selbst gehostete oder per WAS (Windows Process Activation Service) gehostete Workflowdienste mithilfe einer Konfigurationsdatei aktivieren. Ein per WAS gehosteter Workflowdienst verwendet WorkflowServiceHost, wie selbst gehostete Workflowdienste dies auch tun.
SqlWorkflowInstanceStoreBehavior
ist ein Dienstverhalten, mit dem Sie die Eigenschaften von SQL-Workflowinstanzspeicher mithilfe der XML-Konfiguration auf einfache Weise ändern können. Verwenden Sie für per WAS gehostete Workflowdienste die Datei "Web.config". Im folgenden Konfigurationsbeispiel wird gezeigt, wie Sie den SQL-Workflowinstanzspeicher konfigurieren, indem Sie das sqlWorkflowInstanceStore
-Verhaltenselement in einer Konfigurationsdatei verwenden.
<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">
<sqlWorkflowInstanceStore/>
</behavior>
</serviceBehaviors>
Falls Sie keine Werte für die connectionString
- oder connectionStringName
-Eigenschaft festlegen, verwendet der SQL-Workflowinstanzspeicher die standardmäßige Verbindungszeichenfolge DefaultSqlWorkflowInstanceStoreConnectionString
.
Wenn SqlWorkflowInstanceStoreBehavior
angewendet wird, wird DurableInstancingOptions.InstanceStore
auf dem WorkflowServiceHost
auf das SqlWorkflowInstanceStore
-Element festgelegt, das anhand der Konfigurationswerte erstellt wurde. Dies können Sie auch programmgesteuert erreichen, indem Sie SqlWorkflowInstanceStore
mit WorkflowServiceHost
und ohne das Dienstverhaltenelement verwenden.
workflowServiceHost.DurableInstancingOptions.InstanceStore = sqlInstanceStoreObject;
Hinweis: zur Sicherheit |
---|
Es wird empfohlen, keine vertraulichen Informationen wie Benutzernamen und Kennwörter in der Datei "Web.config" zu speichern. Wenn Sie vertrauliche Informationen in der Datei "Web.config" speichern, sollten Sie den Zugriff auf die Datei "Web.config" mit Dateisystem-ACLs (Zugriffssteuerungslisten) sichern. Außerdem können Sie die Konfigurationswerte innerhalb einer Konfigurationsdatei auch gemäß der Beschreibung unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration (möglicherweise in englischer Sprache) sichern. |
Auf die Funktion "SQL-Workflowinstanzspeicher" bezogene Machine.config-Elemente
Die .NET Framework 4-Installation fügt die folgenden Elemente, die sich auf die Funktion "SQL-Workflowinstanzspeicher" beziehen, der Datei "Machine.config" hinzu:
Fügt der Datei "Machine.config" das folgende Verhaltenserweiterungselement hinzu, damit Sie das <
sqlWorkflowInstanceStore
>-Dienstverhaltenelement in der Konfigurationsdatei verwenden können, um die Persistenz für die Dienste zu konfigurieren.<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>