Eskalace správy transakcí

Windows je hostitelem sadu služeb a moduly, které společně tvoří transakcí správce. Transakce řízení eskalace popisuje proces migrace transakcí z jednoho z komponenty správce transakcí.

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í se používá pouze volání uvnitř aplikační domény, bude vrácen nejlepší výkon. Vývojáři nemusí přímo spolupracovat se správcem transakcí. Místo toho je poskytována běžné infrastruktury, který definuje rozhraní, běžné chování a pomocné třídy System.Transactions oboru názvů.

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). Eskalace také dochází v případě zařazení jiného správce prostředků trvalý. Když eskalován, transakce zůstane spravovaných ve stavu zvýšenými až do jeho dokončení.

Mezi System.Transactions transakce a transakce MSDTC, je zprostředkovatel druh transakce, které jsou k dispozici prostřednictvím možné jedné fáze zařazení (PSPE). PSPE je jiný důležité mechanismus v System.Transactions pro optimalizaci výkonu. Umožňuje vzdálený trvalý prostředek umístěný v různých aplikační domény, procesu nebo počítače se účastnit programu System.Transactions transakce, aniž by ji chcete-li být rozšířena na transakci MSDTC. Další informace o PSPE naleznete v tématu Zařazení prostředků jako účastníci transakce.

Jak zahájit eskalaci

Eskalace transakce snižuje výkon, protože příkaz MSDTC nachází v samostatném procesu a escalating transakcí MSDTC výsledků u odesílaných v rámci procesu. Chcete-li zvýšit výkon, měli byste zpoždění nebo vyhnout eskalaci do MSDTC; proto potřebujete vědět, jak a kdy se zahájí eskalace.

Dokud System.Transactions infrastruktury zpracovává těkavých materiály a maximálně jeden trvalý prostředek, který podporuje jednofázové oznámení, transakce zůstává ve vlastnictví System.Transactions infrastruktury. Správce transakcí využije pouze na tyto prostředky, že živé ve stejné doméně aplikace a pro které protokolování (zápis výsledek transakce na disk) není povinný. Eskalaci, která způsobí, že System.Transactions infrastruktury přenos vlastnictví transakce do MSDTC se stane, když:

  • Nejméně jeden trvalý prostředek, který nepodporuje jednofázové oznámení je uveden v transakci.

  • Nejméně dva trvalý prostředky, které podporují jednofázové oznámení jsou v transakci zapsán. Například zařazení jednoho připojení k SQL Serveru 2005 nezpůsobí povýšení transakce. Kdykoli však otevřete druhé připojení k databázi SQL Serveru 2005, která způsobuje zařazení databáze, infrastruktura zjistí, System.Transactions že se jedná o druhý trvalý prostředek v transakci, a eskaluje ho na transakci MSDTC.

  • Požadavek na "zařazování" různé aplikační domény nebo jiný proces transakce je vyvolána. Můžete například serializace objektu transakce v rámci hranice 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 transakce můžete předat tím, že zavoláte na vzdálené metody, která přebírá Transaction jako parametr nebo vám může pokusu o přístup k vzdálené transakční obsluhovaná komponenty. Toto serializuje objekt transakce a má za následek eskalaci jako při serializován transakcí v rámci domény aplikace. Že distribuovaná a místní správce transakcí již není dostatečné.

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

Typ výjimky Podmínka
InvalidOperationException Pokus o eskalovat transakce se rovná úroveň izolace Snapshot.
TransactionAbortedException Správce transakcí je nefunkční.
TransactionException Eskalace nezdaří a aplikace je přerušeno.