Freigeben über


Verwenden von SqlWorkflowPersistenceService

Die SqlWorkflowPersistenceService-Klasse stellt einen voll funktionsfähigen Persistenzdienst dar. Sie können diesen vordefinierten Dienst verwenden, um Workflowzustandsinformationen zu einer Workflowinstanz beizubehalten und abzurufen, wenn dies vom Workflow-Laufzeitmodul angefordert wird.

Der SqlWorkflowPersistenceService-Dienst verwendet die Funktion für Workflow-Transaktionsbatchverarbeitung, die von WorkflowCommitWorkBatchService bereitgestellt wird. Dies bedeutet, dass Objekte, die ausstehende Schreibvorgänge in die SQL-Datenbank darstellen, dem aktuellen Batch hinzugefügt werden und dass die IPendingWork-Schnittstelle implementiert wird.

Die vordefinierte Implementierung der SqlWorkflowPersistenceService-Klasse implementiert das Sperren des Zugriffs auf Workflowzustandsinformationen in der Datenbank, die in Umgebungen verwendet werden, in denen in verschiedenen Prozessen ausgeführte Persistenzdienste unter Umständen Zugriff auf einen einzelnen Datenspeicher besitzen. Eine Spalte innerhalb des SQL-Datenbankschemas wird verwendet, um eine Workflowinstanz, die von einer bestimmten Workflowlaufzeit verwendet wird, als gesperrt zu markieren. Diese Sperren werden von der Workflowlaufzeit nach einem vordefinierten Zeitraum ohne Aktivität aufgehoben. Dieser Zeitraum der Inaktivität wird im Konstruktor der SqlWorkflowPersistenceService-Klasse definiert. Diese Funktion steht für Situationen zur Verfügung, in denen eine Workflowinstanz, auf die eine Workflowlaufzeit zugreift, bereits von einer anderen Workflowlaufzeit geladen wurde. Die zweite Laufzeit, die versucht, den Workflow zu laden, erhält WorkflowOwnershipException.

Hinweis

Die Sperrung wird nicht implementiert, falls ein Konstruktor für den SqlWorkflowPersistenceService verwendet wird, der über keinen Parameter für instanceOwnershipDuration verfügt. Ist ein beliebiger Wert für diesen Parameter gegeben (auch TimeSpan.MaxValue), wird die Sperre aktiviert.

Weitere Informationen zu Sperrungen und Persistenzdiensten im Allgemeinen finden Sie unter Windows Workflow-Persistenzdienste.

Ein weiterer Teil des Workflowzustands, der von SqlWorkflowPersistenceService verwaltet wird, sind die Zeitgeberzeitspannen. Diese Informationen werden in der Workflowdefinition mit DelayActivity-Aktivitäten konfiguriert. Wird ein Workflow das erste Mal von SqlWorkflowPersistenceService geladen, wird die gesamte Zeitgeberkonfiguration in der Workflowlaufzeit registriert. Mithilfe der LoadingInterval-Eigenschaft in SqlWorkflowPersistenceService werden Workflowinstanzen überprüft, um festzustellen, ob Zeitereignisse in einer Pro-Workflowinstanz verarbeitet werden müssen.

Hinweis

Wenn Sie SqlTrackingService und SqlWorkflowPersistenceService in einer Workflowanwendung verwenden, empfiehlt sich die Verwendung einer einzigen Datenbank für Persistenz und Verfolgung.

Öffnen von TCP-Anschluss 135 für Microsoft Distributed Transaction Coordinator

Vor der Verwendung des SqlWorkflowPersistenceService-Diensts zum dauerhaften Speichern eines Workflows in einem Remote-SQL-Server muss sichergestellt werden, dass Windows Firewall den TCP-Anschluss 135 für das Microsoft Distributed Transaction Center (MSDTC) geöffnet hat. Führen Sie dazu folgende Schritte aus:

Öffnen von TCP-Anschluss 135 mit Windows Firewall

  1. Klicken Sie auf Start und anschließend auf Systemsteuerung.

  2. Öffnen Sie Windows-Firewall.

  3. Klicken Sie auf die Registerkarte Ausnahmen.

  4. Klicken Sie auf Programm hinzufügen.

  5. Geben Sie im Dialogfeld Durchsuchen \WINDOWS\system32\msdtc.exe ein.

  6. Klicken Sie auf Öffnen und anschließend auf OK.

  7. Klicken Sie auf Anschluss hinzufügen.

  8. Geben Sie einen Namen für diese Anschlussöffnung ein, und geben Sie in das Nummernfeld Anschluss 135 ein.

  9. Wählen Sie TCP aus, und klicken Sie auf OK.

Erstellen der SQL-Persistenzdatenbank

Das Setup von Windows Workflow Foundation installiert nicht die Datenbanken, die vom SqlWorkflowPersistenceService-Dienst benötigt werden. Das Setup installiert jedoch die SQL-Skripte zum Erstellen und Konfigurieren der Datenbanken für diese Dienste. In diesem Abschnitt finden Sie eine genaue Beschreibung der Schritte für die ordnungsgemäße Konfiguration der vom SqlWorkflowPersistenceService-Dienst verwendeten SQL Server-Datenbank.

Die von Windows Workflow Foundation installierten SQL-Dienste verwenden SQL Server, um Informationen zu speichern. Sie können für diese Aufgaben Microsoft SQL Server 2005 Express, SQL Server 2000 oder höhere Versionen oder SQL Server 2000 Desktop Engine (MSDE) verwenden.

So erstellen Sie die SQL-Persistenzdatenbank

  1. Erstellen Sie mit SQL Server 2005 Express, SQL Server 2000 oder höheren Versionen oder SQL Server 2000 Desktop Engine (MSDE) eine neue Datenbank mit dem Namen WorkflowPersistenceStore, indem Sie die folgende SQL-Abfrageanweisung verwenden:

    CREATE DATABASE WorkflowPersistenceStore
    
  2. Wählen Sie im SQL Query Analyzer-Arbeitsbereich in der Liste der verfügbaren Datenbanken die in Schritt 1 erstellte Datenbank aus.

  3. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie anschließend das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistence_Schema.

  4. Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die Tabellen des SQL-Persistenzdiensts zu erstellen.

  5. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie anschließend das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistence_Logic.

  6. Führen Sie die Abfrage aus, indem Sie auf Ausführen klicken oder F5 drücken, um die gespeicherten Prozeduren des SQL-Persistenzdiensts zu erstellen.

Hinzufügen von SqlWorkflowPersistenceService zum Laufzeitmodul

Laufzeitdienste können dem Windows Workflow Foundation-Laufzeitmodul programmgesteuert oder mithilfe einer Anwendungskonfigurationsdatei hinzugefügt werden.

So ändern Sie app.config für SqlWorkflowPersistenceService:

  1. Erstellen Sie im Services-Element in der Datei app.config ein neues Element mit der Bezeichnung add.

  2. Fügen Sie dem add-Element, das über einen Wert von System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 verfügt, ein Attribut mit dem Namen type hinzu.

  3. Fügen Sie dem add-Element, das über den Wert Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI verfügt, ein Attribut mit der Bezeichnung connectionString hinzu.

Hinweis

Unter Umständen muss die Verbindungszeichenfolge abhängig von der Konfiguration von SQL Server geändert werden. Die hier angezeigte Verbindungszeichenfolge nimmt an, dass der Name der Datenbank WorkflowPersistenceStore lautet und dass SQL Server auf demselben System installiert ist, das für Anwendungsentwicklung verwendet wird.

  1. Konfigurieren Sie den SqlWorkflowPersistenceService-Dienst durch Hinzufügen von Attributen, die den in der SqlWorkflowPersistenceService-Klasse definierten konfigurierbaren Eigenschaften entsprechen.

    Beispiel: Soll festgelegt werden, dass ein Workflow beim Übergang in einen Leerlaufzustand entladen werden soll (beispielsweise bei Verwendung einer DelayActivity-Aktivität), muss dem add-Element ein Attribut mit der Bezeichnung UnloadOnIdle hinzugefügt werden, dem der Wert true zugewiesen wird.

    <add type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionString="Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI;" UnloadOnIdle="true"/>
    

Programmgesteuertes Hinzufügen von SqlWorkflowPersistenceService zum Laufzeitmodul

  1. Rufen Sie die in der WorkflowRuntime-Klasse definierte AddService-Methode auf, und übergeben Sie eine neue Instanz von SqlWorkflowPersistenceService.

    Im folgenden Beispiel wird gezeigt, wie ein SqlWorkflowPersistenceService-Dienst mithilfe derselben Konfiguration wie im zuvor gezeigten Beispiel erstellt wird. In diesem Beispiel wird instanceOwnershipDuration auf TimeSpan.MaxValue und loadingInterval auf zwei Minuten festgelegt. Diese Werte sind die in der SqlWorkflowPersistenceService-Klasse verwendeten Standardwerte.

  2. [C#]

using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
    // Create the SqlWorkflowPersistenceService.
    string connectionString = ="Initial Catalog=WorkflowPersistenceStore;Data Source=localhost;Integrated Security=SSPI;"
    bool unloadOnIdle = true;
    TimeSpan instanceOwnershipDuration = TimeSpan.MaxValue;
    TimeSpan loadingInterval = new TimeSpan(0, 2, 0);
    SqlWorkflowPersistenceService persistService = new SqlWorkflowPersistenceService(connectionString, unloadOnIdle, instanceOwnershipDuration, loadingInterval);
   
    // Add the SqlWorkflowPersistenceService to the runtime engine.
    workflowRuntime.AddService( persistService );
    
    // ...
}

Siehe auch

Aufgaben

Aufgabe 3: Verwenden des Windows Workflow-Persistenzdiensts

Referenz

SqlWorkflowPersistenceService

Konzepte

Windows Workflow-Persistenzdienste

Weitere Ressourcen

Persistence Host Sample
Using Persistence Services Sample
Custom Persistence Service Sample

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.