Freigeben über


Kompensierungsbeispiel

Download sample

Kompensierung definiert die Ausführung von Geschäftslogik, die aus einer Geschäftsausnahme resultiert. Sie liegt vollständig in der Verantwortung des Workflowdesigners, der einen Geschäftsprozess modelliert. Das Auslösen einer Kompensierung wird vom Benutzer und nicht von der Laufzeit definiert. Die Laufzeit stellt den Mechanismus bereit, für den die Kompensierung definiert ist.

In diesem Beispiel befindet sich die zu kompensierende Arbeitseinheit in einer CompensatableTransactionScopeActivity-Aktivität. Eine CompensationHandlerActivity-Aktivität wird dann für diesen Gültigkeitsbereich definiert, für den die Kompensierung definiert ist. Da ein Gültigkeitsbereich nur kompensiert werden kann, wenn er abgeschlossen ist, löst eine ThrowActivity-Aktivität eine Ausnahme aus, nachdem die Ausführung des Gültigkeitsbereichs abgeschlossen ist. Diese Ausnahme wird von einen Ausnahmehandler abgefangen, der eine Kompensierungsaktivität beinhaltet. Die Kompensierungsaktivität gibt den Zielgültigkeitsbereich an, den die Laufzeit als Nächstes ausführt.

In diesem Szenario wird eine Bestellung empfangen und die Kreditkarte des Käufers mit dem Rechnungsbetrag belastet. Der Workflow überprüft, ob das ausgewählte Produkt verfügbar ist. Wenn es verfügbar ist, wird das Produkt ausgeliefert. Wenn das Produkt nicht mehr lieferbar ist, wird eine DiscontinuedProductException ausgelöst. Die DiscontinuedProductException wird vom Workflowausnahmehandler abgefangen. Der Ausnahmehandler löst dann den Kompensierungshandler aus, der von der im Handler enthaltenen CompensateActivity definiert wird. Der Kompensierungshandler schreibt den Rechnungsbetrag dann wieder dem Käufer gut.

Die Ausgabe des Beispiels sieht folgendermaßen aus:

Ausgabe eines Kompensierungsbeispiels

Verwenden des Beispiels

Um dieses Beispiel verwenden zu können, müssen Sie die SQL-Persistenzdatenbank erstellen.

So erstellen Sie die SQL-Persistenzdatenbank

  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 WorkflowPersistenceStore, 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 Server 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>\SqlPersistence_Schema.sql.

  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>\SqlPersistence_Logic.sql.

  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

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

    Hierdurch wird das Beispielprojekt auf die lokale Festplatte extrahiert.

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

  3. Wechseln Sie zum Quellverzeichnis des Beispiels.

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

So führen Sie das Beispiel aus

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

Siehe auch

Referenz

CompensatableTransactionScopeActivity
CompensationHandlerActivity
CodeActivity
FaultHandlerActivity
FaultHandlersActivity
IfElseActivity
IfElseBranchActivity
ThrowActivity

Weitere Ressourcen

Using the CompensationHandler Activity
Adding Compensatable Activities and Compensation Handlers
Compensation Overview
Beispiele für Aktivitäten
Windows Workflow Foundation-Beispiele

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.