Freigeben über


Verwenden des Beispiels für den WorkflowCommitWorkBatch-Dienst

Download sample

In diesem Beispiel wird veranschaulicht, wie Windows Workflow Foundation benutzerdefinierten Diensten ermöglicht, an den gleichen Transaktionen wie die Workflowinstanz, in der die Dienste verwendet werden, teilzunehmen.

Jeder zusammengesetzten Aktivität, mit der ein Transaktionsverhalten verknüpft ist, ist auch ein Arbeitsstapel zugeordnet. Wenn Aktivitäten, die sich in dieser zusammengesetzten Aktivität befinden, eine Methode für einen Dienst aufrufen, der vom Host bereitgestellt wird, kann dieser Dienst ebenfalls Teil des Arbeitsstapels sein. Wenn die zusammengesetzte Aktivität abgeschlossen wird, wird ein Commit für den Arbeitsstapel ausgeführt. Wenn für ein Element aus einem bestimmten Grund kein Commit ausgeführt werden kann, wird für den gesamten Arbeitsstapel ein Rollback durchgeführt. Der Transaktionskontext wird als Teil des Commitprozesses allen Elementen im Stapel zur Verfügung gestellt. Daher ruft der Dienst, der an der Transaktion teilnehmen möchte, ebenfalls den Transaktionskontext ab. Er kann dann diesen Transaktionskontext an alle von ihm vorgenommenen Aufrufe übergeben. Sehr häufig wird zum Beispiel der Transaktionskontext an einen Datenbankaufruf übergeben, sodass sogar die Datenbankaufrufe an der gleichen Transaktion teilnehmen können.

Teilnehmen am Arbeitsstapel

Um am Arbeitsstapel teilzunehmen, muss der Dienst eine Schnittstelle mit dem Namen IPendingWork implementieren.

Registrieren beim Arbeitsstapel

Um am Arbeitsstapel teilnehmen zu können, muss sich der Dienst (oder jeder andere Typ, der am Arbeitsstapel teilnehmen muss) beim Arbeitsstapel registrieren. Das folgende Szenario erläutert die Schritte, die für die Registrierung beim Arbeitsstapel erforderlich sind.

Während der Ausführung ruft eine Aktivität eine Methode im Dienst auf. Anstatt die eigentliche Arbeit in der Methode auszuführen, registriert sich die Methode beim Arbeitsstapel und bei dem Kontext, der die Arbeit schließlich ausführen muss. Wenn später für den Arbeitsstapel ein Commit durchgeführt werden soll, wird die Commit-Methode mit dem Kontext aufgerufen, der zum Zeitpunkt der Registrierung verwendet wurde. Dies bedeutet, dass die Methode die Verarbeitung einfach bis zu einem geeigneten Zeitpunkt zur Ausführung der eigentlichen Arbeit zurückstellt.

Zum Registrieren beim Arbeitsstapel wird die Arbeitsaufgabe wie folgt zum aktuellen Arbeitsstapel hinzugefügt:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

Beispieldetails

Bei dem Beispiel handelt es sich um das Szenario einer Summentransaktion. Eine bestimmte Geldsumme muss von einem Sparkonto auf ein Girokonto transferiert werden. Der Workflow schreibt das Geld zunächst dem Girokonto gut. Anschließend versucht der Workflow, das Sparkonto mit dem entsprechenden Geldbetrag zu belasten. Wenn die Geldsumme im Sparkonto weniger ist als die zu transferierende Summe, wird die Transaktion abgebrochen und das Girokonto wieder zurückgesetzt. Wenn die Summe höher ist, wird die Transaktion erfolgreich durchgeführt.

Der Transaktionskontext wird als Teil der Commit-Methode an die Datenbankaufrufe übergeben, sodass selbst die Datenbank an der gleichen Transaktion beteiligt ist.

Das Beispiel verfügt über drei benutzerdefinierte Aktivitäten.

CreditAmount - Wird verwendet, um die Summe dem Girokonto gutzuschreiben.

DebitAmount - Wird verwendet, um das Sparkonto mit der Summe zu belasten.

TransactionComposite - Eine zusammengesetzte Aktivität, die von der SequenceActivity-Aktivität erbt. Sie stellt das Transaktionsverhalten bereit.

So erstellen und konfigurieren Sie die SQL Server-Datenbank

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

    CREATE DATABASE SqlPersistenceService

    Hinweis   Wenn Sie sowohl SqlTrackingService als auch SqlWorkflowPersistenceService in einer Workflowanwendung verwenden, wird empfohlen, dass Sie eine einzige Datenbank für Persistenz und Überwachung verwenden.

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

  3. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistenceService_Schema.sql, wobei <framework_version> die aktuelle auf dem Computer installierte Version von .NET Framework ist.

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

  5. Klicken Sie im Menü Datei auf Öffnen, und öffnen Sie das SQL-Skript %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<Sprache>\SqlPersistenceService_Logic.sql, wobei <framework_version> die aktuelle auf dem Computer installierte Version von .NET Framework ist.

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

So erstellen Sie das Beispiel und führen es aus

  1. Laden Sie das Beispiel herunter, indem Sie auf Beispiel downloaden klicken.

    Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.

  2. Erstellen Sie die Datenbank TransactionServiceSampleDB, indem Sie das Skript für die Datenbank ausführen, das in der Datei \SQL\TransactionServiceDB.cmd zur Verfügung steht.

    Tipp

    Dieses Skript erstellt die Datenbank mit dem Namen TransactionServiceSampleDB. Die Verbindungszeichenfolge, die im Beispiel verwendet wird, verwendet diesen Datenbanknamen.

    Tipp

    Stellen Sie sicher, dass Sie die richtige Verbindungszeichenfolge im Quellcode aktualisieren, wenn Sie den Namen der Datenbank ändern. Andernfalls kann im Beispiel keine Verbindung mit der Datenbank hergestellt werden. Stellen Sie außerdem vor dem Ausführen des Skripts sicher, dass in Zeile 20 des Skripts der richtige Speicherort für die SQL-Serverinstallation angegeben ist.

  3. Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.

  4. Wechseln Sie zum Quellverzeichnis des Beispiels.

  5. Geben Sie an der Eingabeaufforderung MSBUILD <Name der Projektmappendatei> ein.

  6. Führen Sie im Eingabeaufforderungsfenster des SDKs die EXE-Datei im Ordner Host\bin\debug aus (bzw. im Ordner Host\bin für die VB-Version des Beispiels), der sich unter dem Hauptordner des Beispiels befindet.

  7. Um das Beispiel zu debuggen, machen Sie das SampleWorkflow-Projekt zum Startprojekt, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt klicken und Als Startprojekt festlegen wählen.

  8. Öffnen Sie das Dialogfeld Eigenschaften des SampleWorkflow-Projekts.

  9. Wählen Sie Externes Programm starten, und wählen Sie die Datei host.exe im Ordner Host\bin\Debug.

    Wenn Sie die Datei Host.exe ausführen, wird in dem Beispiel erwartet, dass Sie eine Geldsumme eingeben, die vom Sparkonto auf das Girokonto überwiesen werden soll. Geben Sie eine positive Summe ein, die größer als 0 (null) ist. Je nach Kontostand des Sparkontos wird die Transaktion erfolgreich durchgeführt, oder sie schlägt fehl. Es wird eine entsprechende Anzeige auf dem Bildschirm angezeigt.

Siehe auch

Referenz

Commit
Add
WorkflowCommitWorkBatchService

Weitere Ressourcen

Windows Workflow CommitWorkBatch Services
Using Transactions in Workflows

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.