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:
Erstellt eine XML-Nachricht, die eine Bestellung darstellt.
Beginnt eine BAMApiPo-Aktivität und fügt die Aktivitätsinformationen im Hinblick auf die Bestellung und deren Empfangszeitpunkt hinzu.
Genehmigt die Bestellung oder lehnt sie ab (dies geschieht beliebig).
Aktualisiert die Aktivität BAMApiPo, um den Status der Bestellung („akzeptiert“ oder „abgelehnt“) aufzuzeichnen.
Wenn die Bestellung akzeptiert wurde, führt die RunOnce-Methode auch folgendes aus:
Erstellt eine XML-Nachricht zur Darstellung des zu versendenden Pakets und fügt die Nachricht der Warteschlange mit den Lieferungen hinzu.
Fügt die XML-Nachricht zur Darstellung der Bestellung zur Warteschlange mit den Bestellungen hinzu, die in eine Rechnung einbezogen werden sollen.
Ermöglicht eine Fortsetzung für die Aktivität BAMApiPo.
Beendet die Aktivität BAMApiPo.
Die RunOnce-Methode der ShipmentApplication-Klasse führt folgendes aus:
Ruft eine XML-Nachricht aus der zugehörigen Warteschlange ab, die das zu liefernde Paket darstellt.
Aktualisiert die Aktivität BAMApiPo zum Aufzeichnen des Zeitpunkts, zu dem das Paket versandt wurde.
Beendet die Aktivität BAMApiPo.
Die RunOnce-Methode der InvoiceApplication-Klasse führt folgendes aus:
Ruft eine XML-Nachricht aus der zugehörigen Warteschlange ab, die die in Rechnung zu stellende Bestellung darstellt.
Beginnt eine BAMApiInvoice-Aktivität.
Erstellt eine BAM-Beziehung zwischen der Aktivität BAMApiInvoice und der Aktivität BAMApiPo für die in Rechnung zu stellende Bestellung.
Fügt der Aktivität BAMApiPo Informationen zur Rechnung sowie zum Zeitpunkt von deren Erstellung hinzu.
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.
Beendet die Aktivität BAMApiInvoice.
Die Main-Methode der MainApp-Klasse initialisiert die Anwendung. Sie führt die folgenden Aktionen aus:
Erstellt ein DirectEventStream-Objekt .
Startet mehrere Threads und ruft die Run-Methode des POApplication-Objekts in jedem Thread auf.
Startet mehrere Threads und ruft die Run-Methode des ShipmentApplication-Objekts in jedem Thread auf.
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
Öffnen Sie eine Eingabeaufforderung als Administrator, und führen Sie Beispielpfad>\BAM\ BamApiSample\setup.bat aus<.
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.Erstellen Sie die Projektmappe.
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. ...
Drücken Sie nach etwa 1 Minute STRG+C, oder schließen Sie das Eingabeaufforderungsfenster, um das Programm BamApiSample zu beenden.
Anzeigen der Ergebnisse
Öffnen Sie SQL Server Management Studio.
Erweitern Sie in SQL Server Management Studio den Server, datenbanken, BAMPrimaryImport und tabellen.
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.
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.