Freigeben über


Kompensierung (BizTalk Server-Beispiel)

Im Beispiel "Compensation" wird veranschaulicht, wie die Form "Kompensieren" in einer Orchestrierung verwendet wird.

Ziel des Beispiels

In diesem Beispiel wird veranschaulicht, wie die Transaktion mithilfe der folgenden Schrittfolge kompensiert wird, für die bereits in der Orchestrierung ein Commit ausgeführt wurde:

  1. Geben Sie die Kundendaten in das InfoPath-Formular ein, und übermitteln Sie Daten an die Orchestrierung, die als Webdienst verfügbar gemacht wurde.

  2. Die Orchestrierung weist zwei parallele Aktionen auf. Bei der einen Aktion wird eine Bestätigung an das InfoPath-Formular zurückgegeben, während bei der anderen Aktion die Northwind- und BTSCompensationSampleMailingList-Datenbanken aktualisiert werden.

  3. In der zweiten Aktion ordnet die Orchestrierung die eingehende Nachricht einem CRM-Anwendungsnachrichtenformat (Customer Relationship Management) zu und aktualisiert dann die Tabelle Customers in der Northwind-Datenbank. Anschließend wird die Tabelle Adressenliste in der BTSCompensationSampleMailingList-Datenbank aktualisiert.

  4. Wenn eine der Aktualisierungen fehlschlägt, werden die an der Northwind-Datenbank vorgenommenen Änderungen durch Aufrufen einer externen Assembly kompensiert, die die ursprünglichen Kundendaten wieder zurück in die Datenbank schreiben soll.

Wie dieses Beispiel gestaltet ist und warum

Ein Bereichs-Shape wird in erster Linie für die Transaktionsausführung und Ausnahmebehandlung verwendet, einschließlich der Kompensation. Ein Bereich besteht aus zwei Blöcken. Der erste Block ist der Kontextblock und der zweite Block kann aus einem oder mehreren Blöcken für die Ausnahmebehandlung oder Kompensierung bestehen. Dies ist mit der Try-Catch-Anweisung in der .NET-Programmiersprache vergleichbar. In der Orchestrierung UpdateContact.odx gibt es zwei parallele Aktionen. Im rechten Branch ist der Try-Block das Bereichs-Shape mit dem Namen Aktualisierte Back-End-Systeme, das einen Long-Running Transaktionstyp und einen Upd_Backend Transaktionsbezeichner aufweist. Weiter unten im Datenfluss befindet sich ein Catch-Block, der die allgemeine Ausnahme erfasst und die Kompensierung einleitet.

Weitere Informationen zum Bereichs-Shape finden Sie unter Bereiche. Weitere Informationen finden Sie unter Konfigurieren des Bereichs-Shapes.

Hinweis

Die Orchestrierung muss selbst eine Transaktion mit langer Ausführungsdauer sein, damit Sie den Transaktionstyp auf Atomic oder Long-Running festlegen können.

Im Try-Block gibt es zwei Bereiche namens Update CRM und Update Mailing. Beide Bereiche sind atomarische Transaktionen. Im Bereich CRM aktualisieren befindet sich ein Try-Block und ein Block für die Kompensierung. Der Try-Block aktualisiert die Northwind-Datenbank über einen Methodenaufruf einer externen Assembly. Im Kompensierungsblock erfolgt die Kompensierung. Wenn im Bereich Back-End-Systeme aktualisieren eine Aufnahme auftritt, aktualisiert der Code in der Form CRM-Ausdruck rückgängig machen den Datensatz mit seinem ursprünglichen Zustand. Dies wird durch das Shape Kompensieren im Block Catch Exception ausgelöst.

Hinweis

Durch atomarische Transaktionen wird gewährleistet, dass beim Auftreten eines Fehlers während einer Transaktionsaktualisierung für alle unvollständigen Aktualisierungen automatisch ein Rollback durchgeführt wird, und dass die Auswirkungen der Transaktion rückgängig gemacht werden (mit Ausnahme der Auswirkungen von .NET-Aufrufen, die während der Transaktion vorgenommen werden).

Hinweis

Eine lang ausgeführte Transaktion gilt als abgeschlossen (mit einem Commit), sobald die letzte darin enthaltene Anweisung beendet ist. Im Falle eines Transaktionsabbruchs gibt es kein automatisches Rollback des Zustands. Mithilfe der in diesem Beispiel veranschaulichten Ausnahme- und Kompensierungshandler können Sie ein Rollback programmgesteuert ausführen.

Im Catch-Block ist eine Verzögerungsform für zehn Sekunden festgelegt. Dadurch wird die Kompensierungsaktion verzögert. Es gibt auch ein Kompensieren-Shape , das die Kompensationsaktion in der Upd_Backend Transaktion initiiert.

Folgendes wird ausgeführt, nachdem die Orchestrierung die Eingabenachricht empfängt:

  1. Die Assembly UpdateCrm aktualisiert eine Zeile in der Northwind-Datenbank.

  2. Die Assembly UpdateMailingList aktualisiert einen entsprechenden Datensatz in der BTSCompensationSampleMailingList-Datenbank.

  3. Wenn beim Aktualisieren der Northwind-Datenbank ein Fehler auftritt, wird eine Ausnahme ausgelöst und die Orchestrierung beendet den Prozess.

  4. Wenn beim Aktualisieren der BTSCompensationSampleMailingList-Datenbank ein Fehler auftritt, wird eine Ausnahme ausgelöst und es erfolgt eine Verzögerung von zehn Sekunden, bevor die ursprünglichen Kundendaten in die Northwind-Datenbank zurückgeschrieben werden.

Speicherort dieses Beispiels

<Beispielpfad>\Orchestrierungen\Compensation\

In der folgenden Tabelle werden die Dateien in diesem Beispiel samt Zweck beschrieben.

Datei(en) BESCHREIBUNG
Cleanup.bat Die Batchdatei zum Deinstallieren des Beispiels.
CompensationOrchestration.btproj Orchestrierungsprojekt.
CompensationSample.sln Beispielprojektmappe.
CompensationSampleBinding.xml Bindungsdaten für die Orchestrierung (wird während der Installation verwendet).
ContactInfo.xsd Nachrichtenschema für Kontaktinformationen.
ContactInfo.xsx Die Layoutdatei des Orchestrierungs-Designers.
CreateSQLDataStore.sql Das SQL-Skript zum Erstellen und Füllen der Beispieldatenbank.
CrmSchema.xsd Nachrichtenschema für CRM-Aktualisierung.
MailingListSchema.xsd Nachrichtenaktualisierungsschema für die Adressenliste.
RemoveVirDir.vbs VBScript-Skript (Microsoft Visual Basic Scripting Edition) zum Entfernen virtueller und physikalischer Verzeichnisse (die während der Deinstallation verwendet werden).
Request2Crm.btm Meldungszuordnung zum Übersetzen von Anforderungs- (Kontaktinformationen) in CRM-Aktualisierungsnachricht.
Request2MailingList.btm Meldungszuordnung zum Übersetzen von Anforderungs- (Kontaktinformationen) in Adressenlistennachricht.
Setup.bat Batchdatei zum Installieren dieses Beispiels.
UpdateContact.odx Orchestrierungsdatei.
UpdateRequest2UpdateResponse.btm Meldungszuordnung zum Übersetzen von Anforderungs- (Kontaktinformationen) in Antwortnachricht.
UpdateResponse.xsd Antwortnachrichtenschema.
InfoPath\Contact Info Update.xsn Microsoft InfoPath-Datei zum Übermitteln von Formularen an den Orchestrierungswebdienst.
UpdateCrm\AssemblyInfo.cs Quelldatei für Assemblyinformationen für die Assembly UpdateCrm. (Die Assembly UpdateCrm aktualisiert die Northwind-Datenbank.)
UpdateCrm\UpdateCrm.cs Hauptquellcode für die Assembly UpdateCrm.
UpdateCrm\UpdateCRM.csproj UpdateCrm-Projektdatei.
UpdateMailingList\AssemblyInfo.cs Quelldatei für Assemblyinformationen für die Assembly UpdateMailingList. (Die Assembly UpdateMailingList aktualisiert die Beispieldatenbank.)
UpdateMailingList\UpdateMailingList.cs Hauptquellcode für die Assembly UpdateMailingList.
UpdateMailingList\UpdateMailingList.csproj UpdateMailingList-Projektdatei.

Erstellen und Initialisieren dieses Beispiels

So erstellen und initialisieren Sie das Kompensierungsbeispiel

  1. Navigieren Sie in einem Visual Studio-Befehlsfenster zum folgenden Ordner:

    <Beispielpfad>\Orchestrierungen\Compensation\

  2. Führen Sie die Datei Setup.bat aus, von der folgende Aktionen ausgeführt werden:

    • Erstellen Sie die Beispielassembly und stellen Sie sie bereit.

    • Wenn der Assistent für BizTalk-Webdienstpublishing gestartet wird, führen Sie Folgendes manuell aus:

    1. Klicken Sie auf der Seite Willkommen beim BizTalk-Webdienstveröffentlichungs-Assistenten auf Weiter.

    2. Wählen Sie auf der Seite Webdienst erstellen die Option BizTalk-Orchestrierung als Webdienste veröffentlichen aus, und klicken Sie dann auf Weiter.

    3. Navigieren Sie auf der Seite BizTalk-Assembly nach Beispielpfad>, wählen Sie <\Orchestrations\Compensation\bin\Release\CompensationOrchestration.dll aus, und klicken Sie dann auf Weiter.

    4. Klicken Sie auf der Seite Orchestrierungen und Ports auf Weiter.

    5. Geben Sie auf der Seite Webdiensteigenschaften im Zielnamespace des Webdiensts ein http://Microsoft.BizTalk.Samples.Compensation/, und klicken Sie dann auf Weiter.

    6. Geben Sie auf der Seite Webdienstprojekt unter Speicherort die Zeichenfolge ein http://localhost/CompensationOrchestrationWebServiceProxy.

    7. Aktivieren Sie das Kontrollkästchen Anonymen Zugriff auf Webdienste zulassen .

    8. Aktivieren Sie das Kontrollkästchen BizTalk-Empfangsspeicherort in der folgenden Anwendung erstellen .

    9. Wählen Sie im Dropdownmenü BizTalk-Empfangsspeicherort erstellen im folgenden Anwendungsmenüdie Option BizTalk-Anwendung 1 aus der Dropdownliste aus, und klicken Sie dann auf Weiter.

    10. Klicken Sie auf der Seite Webdienstprojektzusammenfassung auf Erstellen.

    11. Klicken Sie auf der Seite BizTalk Web Services-Veröffentlichungs-Assistent abschließen auf Fertig stellen.

  3. Das Setup erstellt und bindet Ports, erstellt die Back-End-Datenbank für das Beispiel und fügt C#-Assemblys zum globalen Assemblycache hinzu.

    Hinweis

    Sie sollten sicherstellen, dass von BizTalk Server während des Erstellungs- und Initialisierungsprozesses keine Fehler gemeldet wurden, bevor Sie dieses Beispiel ausführen.

Ausführen dieses Beispiels

Nachdem Sie dieses Beispiel erstellt und initialisiert haben, beachten Sie Folgendes vor der Ausführung:

  • Wenn Sie dieses Beispiel unter Windows Server 2008 SP2 oder Windows Server 2008 R2 ausführen, müssen Sie einen IIS-Anwendungspool erstellen und dessen Identität auf ein Konto festlegen, das Mitglied der Windows-Gruppe BizTalk-Anwendungsbenutzer ist. Sie müssen außerdem das virtuelle Verzeichnis des Webdiensts für die Orchestrierung für die Ausführung in diesem Anwendungspool aktualisieren.

  • Fügen Sie das ASPNET-Konto zur Benutzergruppe isolierter BizTalk-Hosts hinzu.

  • Erteilen Sie der Gruppe BizTalk-Anwendungsbenutzer db_owner Berechtigung für die Datenbanken BTSCompensationSampleMailingList und Northwind .

  • Wenn BizTalk Server nicht am Standardspeicherort (Laufwerk:\Programme\Microsoft BizTalk Server <Version>\) installiert ist, müssen Sie das Formular "Contact Info Update.xsn" veröffentlichen, bevor Sie es verwenden. Führen Sie hierzu die folgenden Schritte aus.

    So veröffentlichen Sie das InfoPath-Formular

    1. Klicken Sie in Internet Explorer im Menü Extras auf Internetoptionen.

    2. Klicken Sie auf der Registerkarte Sicherheit auf Internet und dann auf Benutzerdefinierte Ebene.

    3. Stellen Sie im Abschnitt Verschiedenes sicher, dass die Einstellung Domänenübergreifendes Zugreifen auf Datenquellen aktiviert ist, und klicken Sie dann auf OK. Diese Einstellung ist erforderlich, damit der Skriptcode der InfoPath-Benutzeroberflächenlösung ausgeführt werden kann.

    4. Navigieren Sie in Windows Explorer zu <Beispielpfad>\Orchestrierungen\Compensation\InfoPath, klicken Sie mit der rechten Maustaste auf Kontaktinformationen Update.xsn, und klicken Sie dann auf Entwurf.

    5. Die Projektmappe Contact Info Update wird im Entwurfsmodus geöffnet.

    6. Klicken Sie in der InfoPath Contact Info Info Update-Anwendung im Menü Datei auf Veröffentlichen.

    7. Der Webpublishing-Assistent wird angezeigt.

    8. Wählen Sie In einen freigegebenen Ordner auf diesem Computer oder in einem Netzwerk aus , und veröffentlichen Sie die Projektmappe unter dem Pfad <Samples Path>\Orchestrations\Compensation\InfoPath\Contact Info Update.xsn.

    9. Schließen Sie den InfoPath im Entwurfsmodus.

  • Sie sind bereit, um dieses Beispiel ausführen zu können.

    So führen Sie das Kompensierungsbeispiel aus

    1. Doppelklicken Sie auf Contact Info Update.xsn , um sie in InfoPath zu öffnen.

    2. Füllen Sie das Formular für ein Konto aus, das in beiden Datenbanken vorhanden ist. Verwenden Sie z. B. die externe Konto-ID „ALFKI“ aus der Kundentabelle der Northwind-Datenbank.

    3. Wählen Sie im Menü Datei die Option Senden aus, und klicken Sie auf Übermitteln.

    4. Das Antwortdokument sollte im < Ordner Samples Path>\Orchestrations\Compensation\Out angezeigt werden, und die Datenbanken Northwind und BTSCompensationSampleMailingList sollten mit den neuen Daten aus dem InfoPath-Formular aktualisiert werden.

      Hinweis

      Sie können die BTSCompensationSampleMailingList-Datenbank trennen oder offline stellen, um die von der Orchestrierung ausgeführte Kompensierungsaktion zu testen. Überprüfen Sie, dass der Datensatz zuerst in der Northwind-Datenbank aktualisiert wird. Wenn dann die Orchestrierung versucht, die BTSCompensationSampleMailingList-Datenbank zu aktualisieren, da die Datenbank getrennt ist, tritt ein Fehler bei der Aktualisierung auf. Daher wird eine Ausnahme ausgelöst und es erfolgt eine Verzögerung von zehn Sekunden, bevor die Kompensierung ausgeführt wird, um die ursprünglichen Kundendaten wieder in die Northwind-Datenbank zurückzuschreiben.

      Hinweis

      Möglicherweise wird der Fehler "Fehler bei der Anmeldung für den Benutzer 'IIS APPPOOL\DefaultAppPool'" angezeigt. Ursache hierfür kann ein Überprüfungsfehler beim tokenbasierten Serverzugriff sein. Um diesen Fehler zu beheben, erstellen Sie einen neuen Anwendungspool, und verwenden Sie für diesen das Administratorkonto.

Deinstallieren dieses Beispiels

So deinstallieren Sie das Kompensierungsbeispiel

  1. Navigieren Sie in einem Visual Studio-Befehlsfenster zum folgenden Ordner:

    <Beispielpfad>\Orchestrierungen\Compensation\

  2. Führen Sie die Datei Cleanup.bat aus.

Weitere Informationen

Orchestrierungen (Ordner für BizTalk Server-Beispiele)