Eskalace správy transakcí

Systém Windows hostuje sadu služeb a modulů, které společně tvoří správce transakcí. Eskalace správy transakcí popisuje proces migrace transakce z jedné ze součástí správce transakcí do jiné.

System.Transactions obsahuje komponentu správce transakcí, která koordinuje transakci zahrnující maximálně jeden trvalý prostředek nebo více nestálých prostředků. Vzhledem k tomu, že správce transakcí používá pouze volání v rámci domény aplikace, poskytuje nejlepší výkon. Vývojáři nemusí přímo komunikovat se správcem transakcí. Místo toho je v oboru názvů System.Transactions poskytována společná infrastruktura, která definuje rozhraní, společné chování a pomocné třídy.

Pokud chcete poskytnout transakci objektu v jiné aplikační doméně (včetně přes hranice procesu a počítače) na stejném počítači, System.Transactions infrastruktura automaticky eskaluje transakce, aby byla spravována koordinátorem distribuovaných transakcí Společnosti Microsoft (MSDTC). K eskalaci také dojde v případě, že zařadíte jiného odolného správce prostředků. Při eskalaci zůstane transakce spravována ve zvýšeném stavu až do dokončení.

System.Transactions Mezi transakcí a MSDTC transakce existuje zprostředkující typ transakce, který je zpřístupněn prostřednictvím promotable single phase enlistment (PSPE). PSPE je dalším důležitým mechanismem System.Transactions optimalizace výkonu. Umožňuje, aby trvalý vzdálený prostředek umístěný v jiné doméně aplikace, procesu nebo počítači, účastnil se System.Transactions transakce, aniž by to způsobilo, že by byla eskalována na transakci MSDTC. Další informace o PSPE naleznete v tématu Zapojení prostředků jako účastníků transakce.

Jak se zahájí eskalace

Eskalace transakcí snižuje výkon, protože MSDTC se nachází v samostatném procesu a eskalace transakce msDTC vede k odesílání zpráv napříč procesem. Chcete-li zvýšit výkon, měli byste zpozdit nebo se vyhnout eskalaci k MSDTC; proto potřebujete vědět, jak a kdy je eskalace zahájena.

Dokud System.Transactions infrastruktura zpracovává nestálé prostředky a maximálně jeden trvalý prostředek podporující jednofázová oznámení, transakce zůstává ve vlastnictví System.Transactions infrastruktury. Správce transakcí využívá pouze ty prostředky, které žijí ve stejné doméně aplikace a pro které není vyžadováno protokolování (zápis výsledku transakce na disk). Eskalace, která vede k System.Transactions tomu, že infrastruktura převádí vlastnictví transakce do MSDTC, nastane v těchto případech:

  • Nejméně jeden trvalý prostředek, který nepodporuje jednofázová oznámení, je zařazen do transakce.

  • Nejméně dva spolehlivé prostředky, které podporují jednofázová oznámení, jsou zahrnuty do transakce. Například navázání jediného připojení k SQL Serveru 2005 nezpůsobí eskalaci transakce. Kdykoli však otevřete druhé připojení k databázi SQL Serveru 2005, což způsobí zařazení databáze do transakce, infrastruktura zjistí, že se jedná o druhý trvalý prostředek v transakci, a eskaluje ji na transakci MSDTC.

  • Vyvolá se požadavek na "zařazování" transakce do jiné domény aplikace nebo jiného procesu. Například serializace objektu transakce přes hranici domény aplikace. Objekt transakce je zařazován podle hodnoty, což znamená, že jakýkoli pokus o předání přes hranice domény aplikace (i ve stejném procesu) vede k serializaci objektu transakce. Objekty transakcí můžete předat voláním vzdálené metody, která přebírá Transaction jako parametr, nebo se můžete pokusit o přístup ke vzdálené transakční obsluhované komponentě. Tím serializuje objekt transakce a výsledkem je eskalace, jako když je transakce serializována napříč doménou aplikace. Distribuuje se a místní správce transakcí už není adekvátní.

V následující tabulce jsou uvedeny všechny možné výjimky, které mohou být vyvolány během eskalace.

Typ výjimky Podmínka
InvalidOperationException Pokus o eskalaci transakce s úrovní izolace rovna Snapshot.
TransactionAbortedException Správce transakcí nefunguje.
TransactionException Eskalace selže a aplikace se přeruší.