Persistente Client-Side Fehler
In einigen Fällen kann Message Queuing Nachricht in die Zielwarteschlange verschieben. Wenn die Warteschlangenzugriffssteuerungen beispielsweise nicht zulassen, dass die Nachricht vom Client auf den Server verschoben wird, wird die anstärmende Nachricht in die clientseitige Warteschlange für unbende Nachrichten verschoben. In diesem Fall lässt der COM+-Dienst für komponenten in der Warteschlange zu, dass eine Ausnahmeklasse einer Komponente zugeordnet werden kann. Um die Ausnahmeklasse der Komponente zu zuordnen, verwenden Sie die Registerkarte Erweitert auf der Eigenschaftenseite der Komponenten des Verwaltungstool Komponentendienste. Sie können die Ausnahmeklasse auch programmgesteuert zuordnen, indem Sie das ExceptionClass-Katalogkomponentenattribut der COM+-Verwaltungsfunktionen verwenden.
Die Ausnahmeklasse wird entweder als ProgID oder CLSID einer Komponente definiert, die IPlaybackControl implementieren. Der Dienst für Komponenten in der Warteschlange verfügt über einen Monitor für Warteschlangen für unbierte Nachrichten, der die Xact-Warteschlange für unbierte Nachrichten überprüft. Wenn eine Nachricht in der Warteschlange enthalten ist, instanziiert der Warteschlangenmonitor für unzustellbare Nachrichten den Ausnahmehandler, der der Zielkomponente zugeordnet ist, und ruft IPlaybackControl::FinalClientRetryauf, was darauf hinweist, dass ein clientseitiger, nicht behebbarer Fehler aufgetreten ist.
Zusätzlich zu IPlaybackControlsollte der Ausnahmehandler denselben Satz von Schnittstellen implementieren wie die Serverkomponente, für die er Ausnahmen verarbeitet. Wenn IPlaybackControl::FinalClientRetry aufgerufen wird, gibt die Laufzeit der Komponenten in der Warteschlange die fehlerhafte Meldung an den Ausnahmehandler zurück. Dadurch kann der Ausnahmehandler ein alternatives Verhalten für Nachrichten implementieren, die nicht auf den Server verschoben werden können, z. B. durch Generieren einer kompensierenden Transaktion.
Wenn der Ausnahmehandler alle zurückgespielten Methodenaufrufe ab schließt, wird die Nachricht aus der Xact-Warteschlange für unnachrichtierte Nachrichten entfernt und verworfen. Wenn der Ausnahmehandler die Nachricht jedoch abbricht, indem er einen Fehlerstatus von einem der Methodenaufrufe zurücksendet, wird die Nachricht an die Xact-Warteschlange für unbende Nachrichten zurückgegeben. Die folgende Ereignissequenz zeigt, wie clientseitige Ausnahmen behandelt werden:
- Message Queuing kann keine Nachricht an den Server senden und die Nachricht in die Xact-Warteschlange für unbnachrichtig stellen.
- Der Warteschlangenlistener für unbingte Nachrichten (DEAD LETTER Queue Listener, DLQL) findet eine Nachricht in der Xact-Warteschlange für unblinkte Nachrichten.
- Die DLQL ruft die ZIELkomponenten-CLSID aus der Nachricht ab und sucht nach einer Ausnahmeklasse.
- Die DLQL instanziiert die Ausnahmeklasse.
- Die DLQL fragt IPlaybackControl für die Ausnahmeklasse ab.
- Die DLQL ruft die IPlaybackControl::FinalClientRetry-Methode in der Ausnahmeklasse auf.
- Die DLQL gibt alle Eigenschaften- und Methodenaufrufe aus der Nachricht an die Ausnahmeklasse zurück.
- Die DLQL löscht die Meldung, wenn der Ausnahmehandler die Transaktion erfolgreich abgeschlossen hat. Der Ausnahmehandler gibt möglicherweise IObjectContext::SetAbortaus, und die Nachricht verbleibt in der Warteschlange für unnachrichtliche Nachrichten.
Wenn einer der oben genannten Schritte fehlschlägt, wird die Nachricht in der Xact-Warteschlange für unbende Nachrichten zurückgelassen.
Beim Starten liest die DLQL jede Nachricht in der Message Queuing transaktionalen Warteschlange für unnachrichtliche Nachrichten und instanziiert die Ausnahmeklasse für jede Nachricht der Komponenten in der Warteschlange. Nach dem Passieren der Warteschlange wartet es auf neue Nachrichten. Anschließend verarbeitet er jede neue Warteschlangennachricht für unnachrichtische Nachrichten, sobald sie eintrifft.
Wenn Sie in den hier beschriebenen Prozess eingreifen müssen oder wenn Sie eine nicht verfeinerte Nachricht aus der endgültigen Ruhewarteschlange verschieben müssen, verwenden Sie das Nachrichten-Mover-Hilfsprogramm. Weitere Informationen zum Nachrichten-Mover-Hilfsprogramm finden Sie unter Behandeln von Fehlern.