Sdílet prostřednictvím


Chyby Server-Side

Naslouchací proces a hráč spolupracují na zpracování jedových zpráv. Pokud transakce, která se přehrává, selže, řízení front zpráv přesune vstupní zprávu zpět do vstupní fronty. Hráč přeruší transakci, pokud obdrží neúspěšnou HRESULT ze serverové komponenty nebo pokud zachytí výjimku. Pokud problém přetrvává, naslouchací proces může nepřetržitě opakovat v následujícím vzoru:

  • Vyřadit zprávu z fronty
  • Vytvoří instanci objektu.
  • Trpí vrácením zpět
  • Umístí zprávu zpět do horní části fronty.

Služba komponent zařazených do fronty tuto chybu zpracovává pomocí řady front opakování specifických pro aplikaci. Vytvořeno při instalaci komponenty je pro každou aplikaci sedm front, a to následujícím způsobem:

  1. Normální vstupní fronta. Název této fronty je název aplikace modelu COM+. Toto je veřejná fronta služby Řízení front zpráv.

  2. První fronta opakování. Zprávy se sem přesunou, pokud transakce opakovaně selže při zpracování zpráv z normální vstupní fronty. Zprávy v této frontě se zpracovávají po jedné minutě. Před přesunem do zadní části druhé fronty je možné zprávu opakovat třikrát v této frontě. Tato fronta má název ApplicationName_0. Tato fronta je soukromá fronta služby Řízení front zpráv.

  3. Druhá fronta opakování. Zprávy se sem přesunou, pokud transakce opakovaně selže při zpracování zpráv z první fronty opakování. Zprávy v této frontě se zpracovávají po dvou minutách. Před přesunem do zadní části třetí fronty je možné zprávu opakovat třikrát v této frontě. Tato fronta má název ApplicationName_1. Tato fronta je soukromá fronta služby Řízení front zpráv.

  4. Třetí fronta opakování. Zprávy se sem přesunou, pokud transakce opakovaně selže při zpracování zpráv z druhé fronty opakování. Zprávy v této frontě se zpracovávají po čtyřech minutách. Před přesunem do zadní části čtvrté fronty je možné zprávu opakovat třikrát v této frontě. Tato fronta má název ApplicationName_2. Tato fronta je soukromá fronta služby Řízení front zpráv.

  5. Čtvrtá fronta opakování. Zprávy se sem přesunou, pokud transakce opakovaně selže při zpracování zpráv z třetí fronty opakování. Zprávy v této frontě se zpracovávají po osmi minutách. Před přesunutím do páté fronty opakování je možné zprávu opakovat třikrát v této frontě. Tato fronta má název ApplicationName_3. Tato fronta je soukromá fronta služby Řízení front zpráv.

  6. Pátá fronta opakování. Zprávy se sem přesunou, pokud transakce opakovaně selže při zpracování zpráv z čtvrté fronty opakování. Zprávy v této frontě se zpracovávají po šestnácti minutách. Před přesunem do konečné fronty je možné zprávu opakovat třikrát v této frontě. Tato fronta má název ApplicationName_4. Toto je soukromá fronta služby Řízení front zpráv.

  7. Konečná fronta restingu specifická pro aplikaci. Zprávy se sem přesunou, pokud transakce opakovaně přeruší při pokusu o pátý pokus o opakování fronty. Tato fronta má název ApplicationName_DeadQueue. Toto je soukromá fronta služby Řízení front zpráv. Poslední fronta restingu není obsluhována naslouchacím procesem fronty. Zprávy zůstanou tady, dokud se nepřesouvají ručně (třeba nástrojem pro přesouvání zpráv ve frontě) nebo jsou vyprázdněné Průzkumníkem služby Řízení front zpráv.

Zprávy, které nelze přehrát, protože je jasné, že všechny pokusy o opakování selžou, je možné přesunout přímo do konečné fronty restingu specifické pro aplikaci, aniž by bylo možné upřesnit všechny úrovně opakování.

Hráč vydá událost modelu COM+ s cílem upozornit zúčastněné strany, že nelze přehrát zprávy. Události modelu COM+ se vydávají v následujících situacích:

  • Když transakce přeruší
  • Když se zpráva přesune z jedné fronty do jiné
  • Když je zpráva uložena do konečné resting fronty

Zprávy je možné upravit před přesunem z jedné fronty do druhé. Mechanismus zabezpečení komponent zařazených do fronty modelu COM+ umožňuje přesunutí zprávy do front opakování a následné opětovné vložení do počáteční vstupní fronty aplikace. Další informace o zabezpečení součástí zařazených do fronty naleznete v tématu Zabezpečení součástí ve frontě.

Fronty opakování se vytvoří společně s hlavní frontou aplikace, pokud je aplikace označena jako zařazená do fronty nástrojem pro správu služby Component Services nebo pomocí funkcí sady SDK pro správu modelu COM+. Služba komponent zařazených do fronty umožňuje flexibilitu v mechanismu opakování tím, že umožňuje odstranění front opakování. Pokud se například odstraní všechny fronty opakování, zpráva, která trvale přeruší, se přesune přímo z fronty aplikace do konečné fronty restingu specifické pro danou aplikaci. Odebráním jedné nebo více front opakování je možné snížit počet a délku opakování. Pokud se fronty odeberou z pořadí opakování, časování zbývajících front odpovídá pozici ve sekvenci front opakování. Pokud například odeberete frontu opakování ApplicationName_1, ApplicationName_2 a ApplicationName_3, zprávy v ApplicationName_4 budou zpracovány, jako by fronta byla druhá fronta opakování.

Mechanismus opakování je navržený tak, aby v případě potřeby dokončil zprávu. V některých případech nemusí být možné, aby zpráva uspěla. Klient se například může pokoušet stáhnout peníze z účtu, který nemá dostatek finančních prostředků. Za těchto okolností můžete chybu zpracovat mnoha způsoby, včetně následujících:

  • Vygenerování diagnostiky a vystavení upozornění
  • Vytvoření kompenzační transakce
  • Ignorujte problém a zavřete zprávu.

Podobně jako trvalá selhání na straně klienta služba komponent ve frontě umožňuje, aby byla třída výjimek přidružená ke komponentě. Třída výjimky je přidružena ke komponentě pomocí karty Upřesnit na stránce vlastností komponenty nástroje pro správu služby Component Services nebo pomocí funkcí pro správu modelu COM+. Třída výjimky umožňuje vývojáři mít kontrolu po opakování zprávy a před přesunutím této zprávy do konečné fronty restingu specifické pro aplikaci. Další informace o třídě výjimky naleznete v tématu Trvalé Client-Side Selhání.

Následuje posloupnost událostí pro zpracování výjimek na straně serveru:

  1. Zpráva se přesune přes dostupné fronty opakování specifické pro aplikaci.
  2. Poslední opakování v poslední frontě opakování selže.
  3. Služba run-time ve frontě komponenty načte cílovou komponentu ze zprávy a zkontroluje třídu výjimky.
  4. Run-time vytvoří instanci třídy výjimky.
  5. Dotazy za běhu IPlaybackControl třídy výjimky.
  6. Volání za běhu IPlaybackControl::FinalServerRetry ve třídě výjimky.
  7. Doba běhu přehrává všechny vlastnosti a volání metody ze zprávy do třídy výjimky.
  8. Pokud kroky 4 až 6 nejsou úspěšné, přesune se zpráva za běhu do konečné fronty restingu specifické pro aplikaci.

Pokud potřebujete zasahovat do výše popsaného procesu nebo potřebujete přesunout otrávenou zprávu z konečné klidové 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

trvalých selhání Client-Side