Ausführen des Beispiels „Benutzerdefinierte Ausnahmehandler für das Reparieren und erneute Senden von Nachrichten“
Das Beispiel "Benutzerdefinierter Ausnahmehandler reparieren und erneut übermitteln" veranschaulicht eine äußerst effektive Technik zur Integration von menschlichen Eingriffen in ESB- und Microsoft BizTalk-basierte Anwendungsprozesse und implementiert ein nützliches Entwurfsmuster. Der Beispielcode lässt sich nahtlos in das ESB-Ausnahmemanagementsystem integrieren.
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 ihrer Nutzlast die Nachrichten (einschließlich ihrer BizTalk-bezogenen Kontexteigenschaften), die sich "im Flug" befanden, als die Ausnahme aufgetreten ist, und die aktuelle System.Exception-instance vom 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 EAIProcessHandler.odx, die entkoppelt bereitgestellt wird und als benutzerdefinierter Ausnahmehandler fungiert, abonniert den spezifischen Fehlercode, der in der EAIProcess.odx-Orchestrierung generiert wurde, und nutzt die Fehlermeldung. Dieser Ausnahmehandler extrahiert die ursprünglichen Nachrichten (als typisierte Dokumente), und die System.Exception-Instanzen wurden ursprünglich in der Fehlermeldung beibehalten.
Die ursprünglichen Nachrichten stehen jetzt für die Verarbeitung mit allen ursprünglichen Kontexteigenschaften zur Verfügung. Der benutzerdefinierte Ausnahmehandler (EAIProcessHandler.odx) schreibt dann die Nachrichten "Verweigert" und "Approved" in das Dateisystem an den folgenden Speicherorten:
Genehmigte Nachricht:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
Nachricht verweigert für Reparatur und erneute Übermittlung:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
Nachricht verweigert:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline
Der Ausnahmehandler serialisiert die Meldung "Verweigert" für Reparieren und erneutes Übermitteln an das Dateisystem mithilfe einer Microsoft InfoPath-Verarbeitungsanweisung. Eine InfoPath-Vorlage ermöglicht es dem Benutzer, das Formular zu bearbeiten und das Ergebnis erneut zu übermitteln (siehe Abbildung 1), wodurch die EAIProcess.odx-Orchestrierung gestartet wird, die die Nachricht überprüft.
reparieren
Abbildung 1
Eine von der InfoPath-Vorlage "Reparatur und erneute Übermittlung" generierte Testmeldung
Darüber hinaus gibt es einen generischen Sendeport mit dem Namen ALL. Exceptions_FILE, die für die Verwendung der GlobalFaultProcessor-Pipeline konfiguriert 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 InfoPath-Verarbeitungsanweisung in den Ordner \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 zum Reparieren und erneuten Übermitteln des benutzerdefinierten Ausnahmehandlers aus
Bevor Sie dieses Beispiel zum ersten Mal ausführen, stellen Sie sicher, dass der Empfangsspeicherort und die Sendeport-URLs auf die entsprechenden Verzeichnisse im Ordner \Source\Samples\Exception Handling\Test\Filedrop verweisen. Der Empfangsspeicherort sollte den Ordner EAIProcess.RequestPort angeben, und die Sendeport-URLs sollten die Ordner EAIProcess.PostApproval und EAIProcessHandler.PostDecline 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_EAIProcessHandler.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 EAIProcessHandler.PostDecline (im Ordner \Source\Samples\Exception Handling\Test\Filedrop). Die Meldung "Abgelehnt*" wird angezeigt, die von der Ausnahmebehandlungsorchestrierung generiert wurde.
Öffnen Sie den Ordner EAIProcessHandler.RepairSubmit (im Ordner \Source\Samples\Exception Handling\Test\Filedrop). Es wird eine "RepairSubmit"-Meldung angezeigt, die von der Ausnahmebehandlungsorchestrierung generiert wird.
Doppelklicken Sie auf die Datei RepairSubmit, um sie in der entsprechenden InfoPath-Vorlage zu öffnen. Sie sehen, dass die Nachricht zum Bearbeiten und erneuten Übermitteln bereit ist.
Ändern Sie den Wert des Felds Einheitspreis von 0 in 2, und klicken Sie dann auf die Schaltfläche Übermitteln auf der Symbolleiste des InfoPath-Formulars, um das bearbeitete Dokument zur Verarbeitung zurück an BizTalk zu senden. Der Übermittlungsprozess verwendet einen von BizTalk konfigurierten HTTP-Empfangsspeicherort.
Navigieren Sie zum Ordner EAIProcess.PostApproval (im Ordner \Source\Samples\Exception Handling\Test\Filedrop). Nun wird das Dokument "Genehmigung*" mit dem aktualisierten Wert für den Einzelpreis 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 größer als 10, sodass die Geschäftslogik vorschreibt, dass diese Ausnahme den Fehlercode-Feldwert1000 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 namens EAIProcessHandler, die Nachrichten mit dem FaultCode-Feldwert1000 abonniert, übernimmt die neue Fehlermeldung. Der Code in der Orchestrierung erstellt die Meldung "Denied" und die InfoPath-Datei und platziert diese dann in den Ordnern "EAIProcessHandler.PostDecline" und "EAIProcessHandler.RepairSubmit", die für den menschlichen Eingriff bereit sind.