Freigeben über


BAM-API (BizTalk Server-Beispiel)

Das Beispiel BAM API veranschaulicht, wie Aufrufe der BAM-API in eine Anwendung einbezogen werden, um wichtige Informationen zu speichern, die überwacht werden können.

Ziel des Beispiels

In diesem Beispiel wird ein einfaches Einkaufsszenario implementiert. Es umfasst folgende Schritte: Generieren von Bestellungen, Verarbeiten der einzelnen Bestellungen, Erstellen von Lieferungen sowie Erstellen und Verarbeiten von Rechnungen. Während der Ausführung des Beispiels werden BAM-Aktivitäten erstellt und aktualisiert, um die Details und Disposition der Bestellungen und Rechnungen wiederzugeben.

Konzeption und Aufgabe dieses Beispiels

Mit diesem Beispiel soll veranschaulicht werden, wie Informationen aus einer Anwendung, die keine BizTalk-Orchestrierung ist, mithilfe von BAM gespeichert werden. Die einfache Anwendung zeigt mehrere Aspekte von BAM, die Sie wahrscheinlich in einer Produktionsanwendung einsetzen werden. Dabei handelt es sich z. B. um:

  • Mehrere Threads, die zu einer einzelnen Aktivität beitragen

  • Erstellen einer Beziehung zwischen zwei Aktivitäten

  • Verwenden einer Fortsetzung, damit mit unterschiedlichen IDs auf die gleiche Aktivität zugegriffen werden kann

    Das BAM-API-Beispiel besteht aus drei Standard Klassen: eine zum Verarbeiten von Bestellungen, eine zum Verarbeiten von Sendungen und eine zum Verarbeiten von Rechnungen. Jede Klasse verfügt über eine RunOnce-Methode , die eine Nachricht aus einer Warteschlange abruft und dann die Nachricht verarbeitet. Jede Klasse verfügt außerdem über eine Run-Methode , die kontinuierlich die RunOnce-Methode aufruft.

    Die RunOnce-Methode der PoApplication-Klasse führt folgendes aus:

  1. Erstellt eine XML-Nachricht, die eine Bestellung darstellt.

  2. Beginnt eine BAMApiPo-Aktivität und fügt die Aktivitätsinformationen im Hinblick auf die Bestellung und deren Empfangszeitpunkt hinzu.

  3. Genehmigt die Bestellung oder lehnt sie ab (dies geschieht beliebig).

  4. Aktualisiert die Aktivität BAMApiPo, um den Status der Bestellung („akzeptiert“ oder „abgelehnt“) aufzuzeichnen.

  5. Wenn die Bestellung akzeptiert wurde, führt die RunOnce-Methode auch folgendes aus:

    1. Erstellt eine XML-Nachricht zur Darstellung des zu versendenden Pakets und fügt die Nachricht der Warteschlange mit den Lieferungen hinzu.

    2. Fügt die XML-Nachricht zur Darstellung der Bestellung zur Warteschlange mit den Bestellungen hinzu, die in eine Rechnung einbezogen werden sollen.

    3. Ermöglicht eine Fortsetzung für die Aktivität BAMApiPo.

    4. Beendet die Aktivität BAMApiPo.

    Die RunOnce-Methode der ShipmentApplication-Klasse führt folgendes aus:

  6. Ruft eine XML-Nachricht aus der zugehörigen Warteschlange ab, die das zu liefernde Paket darstellt.

  7. Aktualisiert die Aktivität BAMApiPo zum Aufzeichnen des Zeitpunkts, zu dem das Paket versandt wurde.

  8. Beendet die Aktivität BAMApiPo.

    Die RunOnce-Methode der InvoiceApplication-Klasse führt folgendes aus:

  9. Ruft eine XML-Nachricht aus der zugehörigen Warteschlange ab, die die in Rechnung zu stellende Bestellung darstellt.

  10. Beginnt eine BAMApiInvoice-Aktivität.

  11. Erstellt eine BAM-Beziehung zwischen der Aktivität BAMApiInvoice und der Aktivität BAMApiPo für die in Rechnung zu stellende Bestellung.

  12. Fügt der Aktivität BAMApiPo Informationen zur Rechnung sowie zum Zeitpunkt von deren Erstellung hinzu.

  13. Nach einer beliebigen Verzögerung, mit der das Warten auf die Bezahlung der Rechnung simuliert werden soll, wird der Aktivität BAMApiInvoice der Zeitpunkt hinzugefügt, zu dem die Rechnung bezahlt wurde.

  14. Beendet die Aktivität BAMApiInvoice.

    Die Main-Methode der MainApp-Klasse initialisiert die Anwendung. Sie führt die folgenden Aktionen aus:

  15. Erstellt ein DirectEventStream-Objekt .

  16. Startet mehrere Threads und ruft die Run-Methode des POApplication-Objekts in jedem Thread auf.

  17. Startet mehrere Threads und ruft die Run-Methode des ShipmentApplication-Objekts in jedem Thread auf.

  18. Startet mehrere Threads und ruft die Run-Methode des InvoiceApplication-Objekts in jedem Thread auf.

    Die Global-Klasse definiert Konstanten, die von der Beispielanwendung verwendet werden, z. B. die Anzahl der zu erstellenden Threads und den Prozentsatz der abzulehnenden Bestellungen.

    Zusätzlich zur Visual Studio-Projektmappe enthält das Beispiel auch eine Microsoft Excel-Datei, die die Aktivitäten definiert.

Speicherort dieses Beispiels

Dieses Beispiel finden Sie unter <Beispielpfad>\BAM\BamApiSample.

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

Datei BESCHREIBUNG
BamApiSample.cs Instrumentierte Anwendung
BamApiSample.csproj Instrumentiertes Anwendungsprojekt
BamApiSample.sln Instrumentierte Anwendungslösung
BamApiSample.xls Stylesheet für BAM-Definition
Cleanup.bat Batchdatei zum Entfernen der bereitgestellten Beispieldateien
Input.txt Beispieleingabe für die Interceptorkonfiguration
InterceptorConfig.cs Interceptorkonfigurationscode für das API-Beispiel
InterceptorConfig.csproj Interceptorkonfigurationsprojekt
Invoice_config.xml Konfiguration für Rechnungsinterceptor
Invoice_interceptor.bin Serialisierter Rechnungsinterceptor
PurchaseOrder_config.xml Konfiguration für Bestellungsinterceptor
PurchaseOrder_interceptor.bin Serialisierter Bestellungsinterceptor
Setup.bat Batchdatei zum Bereitstellen und Eintragen der Beispieldateien
Shipment_config.xml Konfiguration für Lieferungsinterceptor
Shipment_interceptor.bin Serialisierter Lieferungsinterceptor

Ausführen des BAM-API-Beispiels

  1. Öffnen Sie eine Eingabeaufforderung als Administrator, und führen Sie Beispielpfad>\BAM\ BamApiSample\setup.bat aus<.

  2. Starten Sie Visual Studio als Administrator, und öffnen Sie die <Projektmappe Samples Path>\BAM\ BamApiSample\BamApiSample.sln.

    Wichtig

    Die Zeile //#define Interceptor in der Datei BamApiSample.cs muss auskommentiert werden. Entfernen Sie "//" nicht aus dieser Zeile. Das BAM-API-Beispiel verwendet nur den Code, der sich nicht in einer #if Interceptor Präprozessordirektive befindet.

  3. Erstellen Sie die Projektmappe.

  4. Führen Sie <beispielpfad>\BAM\BamApiSample\bin\debug\BamApiSample.exe aus.

    Die Ausgabe ähnelt der folgenden:

    ...  
    New Purchase Order #17 Received  
    8 was shipped as pkg#87  
    New Purchase Order #18 Received.  
    Shipping package pkg#87 via DHL  
    13 was Approved.  
    18 was Rejected.  
    17 was Rejected.  
    11 was shipped as pkg#114  
    16 wsas Rejected.  
    Shipping package pkg#114 via DHL  
    Invoice #5 send for {2 5 1 9 4 8 11 }  
    Package pkg#49 was delivered  
    New Purchase Order #19 Received.  
    ...  
    
  5. Drücken Sie nach etwa 1 Minute STRG+C, oder schließen Sie das Eingabeaufforderungsfenster, um das Programm BamApiSample zu beenden.

Anzeigen der Ergebnisse

  1. Öffnen Sie SQL Server Management Studio.

  2. Erweitern Sie in SQL Server Management Studio den Server, datenbanken, BAMPrimaryImport und tabellen.

  3. Klicken Sie mit der rechten Maustaste auf dbo.bam_BAMApiInvoice_Active , und klicken Sie dann auf Tabelle öffnen. Wenn Sie SQL Server verwenden, klicken Sie auf Top 1000 Zeilen auswählen.

    Der Inhalt der Tabelle bam_BAMApiInvoice_Active wird im rechten Bereich angezeigt. Jede Tabellenzeile stellt eine BAMApiInvoice-Aktivität dar, die zwar gestartet, doch nicht abgeschlossen wurde.

  4. Klicken Sie mit der rechten Maustaste auf dbo.bam_BAMApiPo_Completed , und klicken Sie dann auf Tabelle öffnen. Wenn Sie SQL Server verwenden, klicken Sie auf Top 1000 Zeilen auswählen.

    Der Inhalt der Tabelle bam_BAMApiPo_Completed wird im rechten Bereich angezeigt. Jede Tabellenzeile stellt eine abgeschlossene BAMApiPo-Aktivität dar.