Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In einigen Fällen kann Message Queuing eine Nachricht in die Zielwarteschlange verschieben. Wenn die Zugriffssteuerungen für die Warteschlange beispielsweise nicht zulassen, dass die Nachricht von Client zu Server verschoben werden kann, wird die fehlerhafte Nachricht in die clientseitige Warteschlange für inaktive Buchstaben verschoben. In diesem Fall ermöglicht der COM+-Komponentendienst eine Ausnahmeklasse, die einer Komponente zugeordnet werden kann. Um die Ausnahmeklasse der Komponente zuzuordnen, verwenden Sie die Registerkarte Erweiterten auf der Seite "Komponenteneigenschaften" des Verwaltungstools für Komponentendienste. Sie können die Ausnahmeklasse auch programmgesteuert zuordnen, indem Sie das ExceptionClass-Katalogkomponenten-Attribut der COM+ Administrativen Funktionen verwenden.
Die Ausnahmeklasse wird entweder als ProgID oder als CLSID einer Komponente definiert, die IPlaybackControlimplementiert. Der Dienst für in die Warteschlange eingereihte Komponenten verfügt über einen Monitor in der Warteschlange für inaktive Buchstaben, der die Xact-Warteschlange für tote Buchstaben überprüft. Wenn eine Nachricht in der Warteschlange vorhanden ist, instanziiert die Warteschlange mit einem inaktiven Buchstaben den Ausnahmehandler, der der Zielkomponente zugeordnet ist, und ruft IPlaybackControl::FinalClientRetryauf, was angibt, dass ein clientseitiger, nicht behebbarer Fehler aufgetreten ist.
Zusätzlich zu IPlaybackControl-sollte der Ausnahmehandler den gleichen Satz von Schnittstellen wie die Serverkomponente implementieren, für die Ausnahmen behandelt werden. Wenn IPlaybackControl::FinalClientRetry aufgerufen wird, gibt die Laufzeit der in die Warteschlange eingereihten Komponenten die fehlerhafte Meldung an den Ausnahmehandler zurück. Auf diese Weise kann der Ausnahmehandler ein alternatives Verhalten für Nachrichten implementieren, die nicht auf den Server verschoben werden können, z. B. durch Generieren einer Kompensierungstransaktion.
Wenn der Ausnahmehandler alle Methodenaufrufe abgeschlossen hat, die wiedergegeben werden, wird die Nachricht aus der Warteschlange für Xact-Sackbuchstaben entfernt und geschlossen. Wenn der Ausnahmehandler die Nachricht jedoch abbricht, indem ein Fehlerstatus von einem der Methodenaufrufe zurückgegeben wird, wird die Nachricht an die Warteschlange mit einem inaktiven Xact-Brief zurückgegeben. Die folgende Abfolge von Ereignissen zeigt, wie clientseitige Ausnahmen behandelt werden:
- Message Queuing kann eine Nachricht nicht an den Server übermitteln und die Nachricht in die Warteschlange mit einem inaktiven Xact-Brief einfügen.
- Der Listener in der Warteschleife (Dead Letter Queue Listener, DLQL) findet eine Nachricht in der Warteschlange mit einem inaktiven Xact-Buchstaben.
- Die DLQL ruft die Zielkomponente CLSID aus der Nachricht ab und sucht nach einer Ausnahmeklasse.
- Die DLQL instanziiert die Ausnahmeklasse.
- Die DLQL-Abfragen für IPlaybackControl- für die Ausnahmeklasse.
- Die DLQL ruft die IPlaybackControl::FinalClientRetry Methode in der Ausnahmeklasse auf.
- Die DLQL gibt alle Eigenschafts- und Methodenaufrufe aus der Nachricht an die Ausnahmeklasse zurück.
- Die DLQL löscht die Nachricht, wenn der Ausnahmehandler die Transaktion erfolgreich abgeschlossen hat. Der Ausnahmehandler kann IObjectContext::SetAbortausgeben, und die Nachricht verbleibt in der Warteschlange mit inaktiven Buchstaben.
Wenn einer der vorherigen Schritte fehlschlägt, bleibt die Nachricht in der Warteschlange für Xact-Sackbuchstaben übrig.
Beim Start liest die DLQL jede Nachricht in der Nachrichtenwarteschlange für Transaktionswarteschlangen für Transaktionen und instanziiert die Ausnahmeklasse für jede nachricht in die Warteschlange eingereihte Komponenten. Nach einer Durchquerung der Warteschlange wartet sie auf neue Nachrichten. Anschließend verarbeitet er jede neue Nachricht in der Warteschleife für inaktive Buchstaben, sobald sie eingeht.
Wenn Sie in den hier beschriebenen Prozess eingreifen müssen oder wenn Sie eine Giftnachricht aus der endgültigen ruhenden Warteschlange verschieben müssen, verwenden Sie das Hilfsprogramm "Message Mover". Weitere Informationen zum Nachrichtenverschiebungsprogramm finden Sie unter Behandeln von Fehlern.
Verwandte Themen