Freigeben über


Aufgabe 3: Verwenden des Windows Workflow-Persistenzdiensts

In dieser Aufgabe erfahren Sie, wie der SqlWorkflowPersistenceService-Dienst in der Anwendung verwendet wird. Befindet sich eine Assembly für eine bestimmte Zeit im Leerlauf, was in diesem Fall bei Ausführung der DelayActivity-Aktivität zutrifft, kann die Windows Workflow Foundation den Workflow dauerhaft speichern, bis eine Fortsetzung erforderlich ist.

Der SqlWorkflowPersistenceService-Dienst verwendet eine SQL Server-Datenbank, um den aktuellen Zustand des Workflows in einem als entladen bezeichneten Prozess zu speichern. Wenn der Workflow fortgesetzt werden kann, wird das Windows Workflow Foundation-Laufzeitmodul vom SqlWorkflowPersistenceService-Dienst benachrichtigt, und der Workflow wird daraufhin geladen und die Ausführung fortgesetzt.

Hinweis

Von den von Windows Workflow Foundation installierten SQL-Diensten wird Microsoft SQL Server zum Speichern von Informationen verwendet. Sie können für diese Aufgaben Microsoft SQL Server 2005 Express, Microsoft SQL Server 2000 oder höhere Versionen oder Microsoft SQL Server 2000 Desktop Engine (MSDE) verwenden.

Hinweis

Die für diese Dienste erforderlichen Datenbanken werden nicht vom Setup von Windows Workflow Foundation installiert. Die SQL-Skripte zum Erstellen und Konfigurieren der Datenbanken für diese Dienste werden jedoch vom Setup von Windows Workflow Foundation installiert.

Hinweis

Für diese Aufgabe wird eine Datei vom Typ App.config benötigt. Wurden die Schritte in Aufgabe 2: Konfigurieren von Laufzeitdiensten mithilfe von App.Config nicht ausgeführt, muss eine Datei vom Typ App.config erstellt werden, bevor der Vorgang fortgesetzt wird.

Hinweis

Sie werden aufgefordert, die Übungen der Reihe nach auszuführen. Dies ist jedoch nicht erforderlich. Sie können durch Öffnen des Beispielprojekts mit dieser Übung beginnen und mit den Schritten im folgenden Abschnitt fortfahren.

So erstellen Sie die SQL-Persistenzdatenbank:

  1. Erstellen Sie mit Microsoft SQL Server 2005 Express, Microsoft SQL Server 2000 oder höheren Versionen oder Microsoft SQL Server 2000 Desktop Engine (MSDE) eine neue Datenbank mit dem Namen WorkflowPersistenceStore, indem Sie 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. Klicken Sie auf Ausführen, um die Abfrage auszuführen, oder drücken Sie F5, um die Tabellen für SQL Persistence Service 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. Klicken Sie auf Ausführen, um die Abfrage auszuführen, oder drücken Sie F5, um die gespeicherten Prozeduren für SQL Persistence Service zu erstellen.

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.

  4. Fügen Sie dem add-Element, das über den Wert 5 verfügt, ein Attribut mit der Bezeichnung LoadIntervalSeconds hinzu.

    <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;"
         LoadIntervalSeconds="5"/>
    

So erstellen Sie zusätzliche Workflowereignishandler:

  1. Fügen Sie in der Main-Methode der Program-Klasse einen neuen Ereignishandler für das WorkflowLoaded-Ereignis hinzu.

    workflowRuntime.WorkflowLoaded += new
        EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowLoaded);
    
  2. Fügen Sie in der Main-Methode der Program-Klasse einen neuen Ereignishandler für das WorkflowIdled-Ereignis hinzu.

    workflowRuntime.WorkflowIdled += new
        EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);
    
  3. Fügen Sie in der Main-Methode der Program-Klasse einen neuen Ereignishandler für das WorkflowPersisted-Ereignis hinzu.

    workflowRuntime.WorkflowPersisted += new
        EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowPersisted);
    
  4. Fügen Sie in der Main-Methode der Program-Klasse einen neuen Ereignishandler für das WorkflowUnloaded-Ereignis hinzu.

    workflowRuntime.WorkflowUnloaded += new
       EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowUnloaded);
    
  5. Erstellen Sie eine neue statische Methode mit dem Namen workflowRuntime_WorkflowLoaded.

    Verwenden Sie im Methodentext die WriteLine-Methode, um eine Informationsmeldung anzuzeigen.

    static void workflowRuntime_WorkflowLoaded(object sender, WorkflowEventArgs e)
    {
        Console.WriteLine("Workflow {0} loaded", e.WorkflowInstance.InstanceId);
    }
    
  6. Erstellen Sie eine neue statische Methode mit dem Namen workflowRuntime_WorkflowIdled.

  7. Verwenden Sie im Methodentext die WriteLine-Methode, um eine Informationsmeldung anzuzeigen.

  8. Rufen Sie die Unload-Methode auf, die im WorkflowInstance-Objekt im WorkflowEventArgs-Parameter definiert ist.

    Hinweis

    Die hier beschriebene Methode zum Entladen von WorkflowInstance beim Übergang des Workflows in den Leerlauf ermöglicht das Durchführen anwendungsspezifischer Logik, bevor der Workflow beibehalten wird. Benötigen Sie diese Funktion nicht, fügen Sie dem SqlWorkflowPersistenceService-Element in der Datei App.config der Anwendung ein Attribut mit der Bezeichnung UnloadOnIdle hinzu, und legen Sie dieses Attribut auf true fest.

    static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)
    {
        Console.WriteLine("Workflow {0} idled", e.WorkflowInstance.InstanceId);
        e.WorkflowInstance.Unload();
    }
    
  9. Erstellen Sie eine neue statische Methode mit dem Namen workflowRuntime_WorkflowPersisted.

    Verwenden Sie im Methodentext die WriteLine-Methode, um eine Informationsmeldung anzuzeigen.

    static void workflowRuntime_WorkflowPersisted(object sender, WorkflowEventArgs e)
    {
        Console.WriteLine("Workflow {0} persisted", e.WorkflowInstance.InstanceId);
    }
    
  10. Erstellen Sie eine neue statische Methode mit dem Namen workflowRuntime_WorkflowUnloaded.

    Verwenden Sie im Methodentext die WriteLine-Methode, um eine Informationsmeldung anzuzeigen.

    static void workflowRuntime_WorkflowUnloaded(object sender, WorkflowEventArgs e)
    {
        Console.WriteLine("Workflow {0} unloaded", e.WorkflowInstance.InstanceId);
    }
    
  11. Erstellen Sie eine neue statische Methode mit dem Namen UnloadInstance, die ein Object mit dem Namen workflowInstance als Parameter verwendet.

  12. Wandeln Sie in der UnloadInstance-Methode den workflowInstance-Parameter in ein WorkflowInstance-Objekt um, und rufen Sie die Unload-Methode zum Beibehalten des Workflows auf.

    static void UnloadInstance(object sender, WorkflowEventArgs e)
    {
        Console.WriteLine("Workflow {0} unloaded", e.WorkflowInstance.InstanceId);
        e.WorkflowInstance.Unload();
    }
    
  13. Erstellen Sie das Projekt, und führen Sie die Anwendung aus.

    Das Ergebnis entspricht in etwa der folgenden Abbildung.

    Ausgabe nach dem Beenden von Aufgabe 3

Kompilieren des Codes

Informationen zum Kompilieren des Codes finden Sie unter Kompilieren des Codes.

In Aufgabe 4: Verwenden des Windows Workflow-Überwachungsdiensts erfahren Sie, wie Workflowinstanz- und Aktivitätsereignisse , die während der Workflowausführung auftreten, mit SqlTrackingService überwacht werden.

Siehe auch

Aufgaben

Aufgabe 4: Verwenden des Windows Workflow-Überwachungsdiensts

Referenz

SqlWorkflowPersistenceService

Konzepte

Erstellen benutzerdefinierter Persistenzdienste

Weitere Ressourcen

Using Persistence Services
Custom Persistence Service

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.