Ausführen des Beispiel „Benutzerdefinierte Ausnahmehandler für die persistente Speicherung von Nachrichten“
Das Beispiel Für den benutzerdefinierten Ausnahmehandler für nachrichten persistierende Nachrichten zeigt einen lose gekoppelten generischen Handler, der Fehlermeldungen empfängt, die darin enthaltenen Microsoft BizTalk-Nachrichten extrahiert und als Datenträgerdateien in das Dateisystem schreibt.
Das Beispiel zeigt, wie Sie einen benutzerdefinierten Ausnahmehandler in einer Orchestrierung verwenden können. Wenn bei einem Prozess in der Orchestrierung (EAIProcess.odx) ein Fehler auftritt, generiert und veröffentlicht der Ausnahmehandler eine ESB-Fehlermeldung. Diese Fehlermeldung enthält in der Nutzlast die Nachrichten (einschließlich ihrer BizTalk-bezogenen Kontexteigenschaften), die sich "im Flug" befanden, als die Ausnahme aufgetreten ist, sowie die aktuelle System.Exception-instance von der BizTalk Orchestration-Engine abgefangen. Wenn dies der Fall ist, werden eine Meldung "Verweigert" und eine Meldung "Genehmigt" mit der Fehlermeldung beibehalten.
Eine zweite Orchestrierung namens EAIGenericHandler.odx, die entkoppelt bereitgestellt wird und als benutzerdefinierter Ausnahmehandler fungiert, abonniert den spezifischen Fehlercode, der in der EAIGenericHandler.odx-Orchestrierung generiert wird, und nutzt die Fehlermeldung. Dieser Ausnahmehandler extrahiert die ursprünglichen Nachrichten (als typlose Dokumente) und die System.Exception-Instanzen, die ursprünglich in der Fehlermeldung beibehalten wurden.
Das Beispiel "Message Persisting Custom Exception Handler" unterscheidet sich vom Beispiel "Benutzerdefinierte Ausnahmehandler reparieren und erneut übermitteln", da die in diesem Beispiel verwendete EAIGenericHandler.odx-Orchestrierung keine Abhängigkeit von den Schemas aufweist, die im Fehlerveröffentlichungsorchestrierungsprozess (EAIProcess.odx) verwendet werden. Insbesondere ruft die EAIGenericHandler.odx-Orchestrierung die ursprünglichen Nachrichten aus der Fehlernachricht als System.Xml ab. XmlDocument-Instanzen anstelle von typisierten Nachrichten basierend auf den Schemas, die in der EAIProcess.odx-Orchestrierung verwendet werden. Außerdem werden die Nachrichten als Sammlung zurückgegeben, die von Code problemlos aufgezählt werden kann.
Der benutzerdefinierte Ausnahmehandler (EAIGenericHandler.odx) schreibt dann die Nachrichten "Verweigert" und "Approved" an den Dateisystemspeicherort \Source\Samples\Exception Handling\Test\Filedrop\EAIGenericHandler.PostTmpMsg.
Darüber hinaus gibt es einen generischen Sendeport mit dem Namen ALL. Exceptions_FILE für die Verwendung der GlobalFaultProcessor-Pipeline konfiguriert, die als Teil des Microsoft BizTalk ESB Toolkit Exception Management Frameworks installiert ist. Dieser Port abonniert alle Ausnahmen im System, sowohl BizTalk-Nachrichten, die fehlgeschlagene Nachrichten weiterleiten, als auch ESB-Fehlermeldungen. Das Exception Management Framework normalisiert sie alle in ein einzelnes Format und serialisiert sie mithilfe einer Microsoft InfoPath-Verarbeitungsanweisung an den Speicherort \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions.
Installation
Alle Beispiele für die Ausnahmeverwaltung verwenden denselben Satz von Kerndiensten und BizTalk-Anwendungsartefakten. Daher müssen Sie die Ausnahmeverwaltungs-Beispielartefakte nur einmal installieren, um alle Ausnahmeverwaltungsbeispiele ausführen zu können. Informationen zum Installieren der Ausnahmeverwaltungsbeispiele finden Sie unter Installieren der Beispiele für die Ausnahmeverwaltung.
Ausführen der Beispielanwendung
So führen Sie das Beispiel für den benutzerdefinierten Ausnahmehandler für Nachrichten persistieren aus
Bevor Sie dieses Beispiel zum ersten Mal ausführen, stellen Sie sicher, dass der Empfangsspeicherort und die Sendeport-URL auf die entsprechenden Verzeichnisse im Ordner \Source\Samples\Exception Handling\Test\Filedrop verweisen. Der Empfangsspeicherort sollte den Ordner EAIProcess.RequestPort angeben, und die Sendeport-URL sollte den Ordner EAIGenericHandler.PostTmpMsg angeben.
Wenn die GlobalBank.ESB-Anwendung noch nicht ausgeführt wird, verwenden Sie die BizTalk-Verwaltungskonsole, um sie zu starten.
Starten Sie das Beispiel, indem Sie die Beispieldatei mit dem Namen Request_EAIGenericHandler.xml im Ordner \Source\Samples\Exception Handling\Test\Data in den Ordner kopieren, der für den EAIProcess.RequestPort_FILE Empfangsspeicherort angegeben ist: \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort.
Öffnen Sie den Ordner EAIGenericHandler.PostTmpMsg (im Ordner \Source\Samples\Exception Handling\Test\Filedrop\). Die ursprüngliche Nachricht wird angezeigt.
Funktionsweise des Beispiels
Die von Ihnen übermittelte Nachricht aktiviert die EAIProcess-Orchestrierung. Wenn die EAIProcess-Orchestrierung die Nachricht verarbeitet, versucht sie, 1 durch den Einzelpreis zu dividieren. Da der Einzelpreis 0 ist, tritt eine Dividieren-by-Null-Ausnahme auf. Code im Ereignishandler der Orchestrierung fängt diese Ausnahme ab und erstellt eine Fehlermeldung. Die Auftragsmenge in der Nachricht ist kleiner als 10, sodass die Geschäftslogik vorschreibt, dass diese Ausnahme den FaultCode-Feldwert2000 aufweist.
Die EAIProcess-Orchestrierung veröffentlicht dann die Fehlermeldung über einen direkt gebundenen Port im BizTalk Message Box, und die Orchestrierung endet.
Eine benutzerdefinierte Fehlerhandlerorchestrierung mit dem Namen EAIGenericHandler, die Nachrichten mit dem Fehlercode-Feldwert2000 abonniert, übernimmt die neue Fehlermeldung. Der Code in der Orchestrierung extrahiert alle Nachrichten aus der Ausnahmemeldung (Fehlermeldung) und schreibt sie in Datenträgerdateien.