Verwenden des Ops-Adapters
Die Lösung für die Geschäftsprozessverwaltung verwendet den Ops-Adapter zum Verarbeiten von Fehlerberichten aus der neuen Fehlerberichtsfunktion. Die Lösung umfasst einen Beispielhandler zum Verarbeiten von Nachrichten vom Adapter. Sie können jedoch problemlos einen eigenen Handler erstellen und den Adapter in anderen Lösungen verwenden. Informationen zur Fehlerberichterstattungsfunktion finden Sie unter Verwenden des Routings von fehlerhaften Nachrichten.
Hinweis
Obwohl die Lösung den Adapter für die Fehlerberichtserstellung verwendet, ist sein Einsatz nicht auf die Fehlerbehandlung beschränkt. Vielmehr können Sie den Adapter in den verschiedensten Fällen immer dann verwenden, wenn Sie eine bestimmte Objektmethode als Reaktion auf eine Nachricht ausführen möchten.
Vorgehensweise des Ops-Adapters zum Verarbeiten von Fehlerberichten
Ports in der Lösung, die die Fehlerberichterstattung verwenden, senden die Fehlermeldungen letztendlich an den BizTalkErrors-SP-Port . Der Filter für den Port testet das Vorhandensein der ErrorReport.ErrorType-Kontexteigenschaft . Diese Kontexteigenschaft gibt es nur bei Fehlerberichten.
Der BizTalkErrors-SP-Sendeport führt die Fehlermeldung über eine Pipeline aus, die eine XML-Assemblerkomponente verwendet, um die Nachricht in einem Umschlag zu platzieren. Dann wird die Meldung an den Ops-Adapter gesendet.
Der durch das Schema ErrorEnvelope definierte Umschlag wird gekennzeichnet, damit er jeden Nachrichtentyp akzeptiert. Allerdings bedeutet „jeden“ = „jeder beliebige Nachrichtentyp, der in der BizTalk-Gruppe definiert wurde“. Wenn die Lösung eine Nachricht eines unbekannten Typs empfängt, kann dies zu angehaltenen Nachrichten führen. Eine solche Nachricht würde einen Fehler erzeugen und an den BizTalkErrors-SP-Port weitergeleitet. Die Nachricht wiederum würde einen Fehler in der XML-Assemblerkomponente der Pipeline generieren, weil es sich dabei um einen unbekannten Nachrichtentyp handelt. Aufgrund des Pipelinefehlers wird die Nachricht angehalten.
Hinweis
Um Routingfehler aufgrund unbekannter Nachrichtentypen zu behandeln, müssen Sie eine benutzerdefinierte Pipelinekomponente schreiben und die Komponente in einer benutzerdefinierten Pipeline für den BizTalkErrors-SP-Port verwenden. Die benutzerdefinierte Komponente ersetzt die XML-Assemblerkomponente. Ihre benutzerdefinierte Komponente muss die ErrorReport-Eigenschaften in den Umschlagkopf einfügen und die Nachricht dem Textkörper des Umschlags hinzufügen.
Beim Ops-Adapter handelt es sich um einen unidirektionalen transaktionalen Sendeadapter. Wenn der Adapter eine Nachricht verarbeitet, lädt er zuerst bei Bedarf die angegebene Assembly. Der Adapter speichert Assemblys im Speicher zwischen, um zu vermeiden, dass die Assembly bei jedem Aufruf geladen werden muss. Anschließend wird ein instance der angegebenen Klasse erstellt, und dann wird das Objekt in der Assembly mithilfe von Reflektion abgerufen, die die IOpsAIC-Schnittstelle implementiert. Wenn all dies erfolgreich ist, ruft der Adapter die Initialize-Methode auf und ruft dann die Execute-Methode auf, wobei die Fehlermeldung übergeben wird.
Wenn ein Fehler mit dem Aufrufen von Execute auftritt, übermittelt der Adapter die Nachricht erneut. Wenn die angegebene Klasse die IOpsAIC-Schnittstelle nicht implementiert oder die Klasse oder Assembly nicht gefunden werden kann, hält der Adapter die Nachricht an.
Tipp
Weil der Adapter die Reflektion verwendet, muss sich die Assembly mit der Klasse im globalen Assemblycache (GAC) befinden.
Die „IOpsAIC“-Schnittstelle
Der Adapter erfordert ein Objekt, das die IOpsAIC-Schnittstelle implementiert. Die Schnittstelle sieht wie folgt aus:
interface IOpsAIC
{
void Initialize(string config);
void Execute(byte[] message);
}
Der Adapter übergibt die ursprüngliche Nachricht als Bytearray an die Execute-Methode .
Konfigurieren des Adapters
Der Adapter wird genauso wie jeder andere Adapter konfiguriert. In der nachstehenden Tabelle werden die Konfigurationseigenschaften des Adapters beschrieben:
Anzeigename | BESCHREIBUNG |
---|---|
.NET Assembly Strong Name | Der vollqualifizierte Name der Assembly. |
OpsAIC Class Name | Der Name der Klasse in der Assembly, die die IOpsAIC-Schnittstelle implementiert. |
Initialization Data | Eine Zeichenfolge, die als Argument an die Initialize-Methode der -Klasse übergeben wird. |
Beachten Sie, dass für den Adapter der vollqualifizierte Name der Assembly erforderlich ist. Der vollqualifizierte Name ist der Name, der einer Assembly gegeben wird, wenn Sie sie dem GAC hinzufügen. Der vollqualifizierte Name ist eine Zeichenfolge, die den Assemblynamen, die Version, die Kultur und das Token des öffentlichen Schlüssels enthält. Sie können die vollqualifizierten Namen von Assemblys mithilfe des Global Assembly Cache-Tools, gacutil.exe, anzeigen.
Weitere Informationen zu vollqualifizierten Assemblynamen finden Sie unter „Assemblynamen“ im .NET Framework-Entwicklerhandbuch. Weitere Informationen zu gacutil.exe finden Sie unter "Global Assembly Cache Tool (Gacutil.exe)" im .NET Framework Entwicklerhandbuch.
Sie müssen den Namespace mit dem Klassennamen angeben. Wenn die Klasse beispielsweise OpsHandler im OperationsHandler-Namespace ist, würden Sie den Klassennamen als OperationsHandler.OpsHandler zuordnen.