Sdílet prostřednictvím


Trvalá selhání Client-Side

V některých případech služby Řízení front zpráv může přesunout zprávu do cílové fronty. Pokud například řízení přístupu fronty nepovoluje přesunutí zprávy z klienta na server, přesune se zpráva o přesměrování do fronty nedoručených zpráv na straně klienta. Pokud k tomu dojde, služba komponent zařazených do fronty modelu COM+ umožňuje, aby byla ke komponentě přidružena třída výjimky. Chcete-li přidružit třídu výjimky ke komponentě, použijte kartu Upřesnit na stránce vlastností součásti nástroje pro správu služby Component Services. Třídu výjimek můžete také přidružit programově pomocí atributu komponenty katalogu ExceptionClass funkcí pro správu modelu COM+.

Třída výjimky je definována jako ProgID nebo CLSID komponenty implementované IPlaybackControl. Služba komponent ve frontě má monitorování fronty nedoručených písmen, které prohledá frontu nedoručených zpráv Xact. Pokud je ve frontě zpráva, monitorování fronty nedoručených zpráv vytvoří instanci obslužné rutiny výjimky přidružené k cílové komponentě a volá IPlaybackControl::FinalClientRetry, což znamená, že došlo k neopravitelné chybě na straně klienta.

Kromě IPlaybackControlby obslužná rutina výjimky měla implementovat stejnou sadu rozhraní jako serverová komponenta, pro kterou zpracovává výjimky. Při IPlaybackControl::FinalClientRetry je volána, součásti zařazené do fronty za běhu přehrají zprávu, která selhává, obslužné rutině výjimky. To umožňuje obslužné rutině výjimky implementovat alternativní chování zpráv, které nelze přesunout na server – například generováním kompenzační transakce.

Pokud obslužná rutina výjimky dokončí všechna volání metody přehrávala zpět, zpráva se odebere z fronty nedoručených zpráv Xact a je zamítnuta. Pokud však obslužná rutina výjimky přeruší zprávu vrácením stavu selhání z jednoho z volání metody, zpráva se vrátí do fronty nedoručených zpráv Xact. Následující posloupnost událostí ukazuje, jak se zpracovávají výjimky na straně klienta:

  1. Službě Řízení front zpráv se nepodaří doručit zprávu na server a zprávu umístí do fronty nedoručených zpráv Xact.
  2. Naslouchací proces fronty nedoručených zpráv (DLQL) najde zprávu ve frontě nedoručených zpráv Xact.
  3. DLQL načte z zprávy CLSID cílové komponenty a vyhledá třídu výjimky.
  4. DlQL vytvoří instanci třídy výjimky.
  5. DLQL dotazuje IPlaybackControl třídy výjimky.
  6. DLQL volá IPlaybackControl::FinalClientRetry metoda ve třídě výjimky.
  7. DLQL přehrává všechny vlastnosti a volání metody ze zprávy do třídy výjimky.
  8. DLQL odstraní zprávu, pokud obslužná rutina výjimky dokončí transakci úspěšně. Obslužná rutina výjimky může vydat IObjectContext::SetAborta zpráva zůstane ve frontě nedoručených zpráv.

Pokud některý z předchozích kroků selže, zpráva zůstane ve frontě nedoručených zpráv Xact.

Při spuštění knihovna DLQL přečte každou zprávu ve frontě transakčních nedoručených zpráv služby Řízení front zpráv a vytvoří instanci třídy výjimky pro každou zprávu o komponentách ve frontě. Po průchodu frontou počká na nové zprávy. Potom zpracuje každou novou zprávu fronty nedoručených zpráv při doručení.

Pokud potřebujete zasahovat do procesu popsaného zde nebo pokud potřebujete přesunout otrávenou zprávu z konečné resting fronty, použijte nástroj pro přesouvání zpráv. Další informace o nástroji pro přesouvání zpráv naleznete v tématu zpracování chyb.

chyby Client-Side

chyby Server-Side