Interoperabilita s podnikovými službami a transakcemi MODELU COM+

Obor System.Transactions názvů podporuje interoperabilitu mezi objekty transakcí vytvořenými pomocí tohoto oboru názvů a transakcí vytvořených prostřednictvím modelu COM+.

Výčet EnterpriseServicesInteropOption můžete použít při vytváření nové TransactionScope instance k určení úrovně interoperability s modelu COM+.

Když kód aplikace ve výchozím nastavení zkontroluje statickou Current vlastnost, System.Transactions pokusí se vyhledat transakci, která je jinak aktuální, nebo TransactionScope objekt, který určuje hodnotu Currentnull. Pokud některý z těchto objektů nemůže najít, System.Transactions dotazuje se na kontext modelu COM+ pro transakci. Všimněte si, že i když System.Transactions může najít transakci z kontextu COM+, stále upřednostňuje transakce, které jsou nativní pro System.Transactions.

Úrovně interoperability

Výčet EnterpriseServicesInteropOption definuje následující úrovně interoperability –NoneFull a Automatic.

Třída TransactionScope poskytuje konstruktory, které přijímají EnterpriseServicesInteropOption jako parametr.

None, jak název napovídá, znamená, že mezi System.EnterpriseServices kontexty a obory transakcí neexistuje žádná interoperabilita. Po vytvoření objektu s použitím TransactionScopeNone se všechny změny Current neprojeví v kontextu COM+. Podobně se změny transakce v kontextu MODELU COM+ neprojeví v Current. Jedná se o nejrychlejší režim provozu, System.Transactions protože není nutná žádná další synchronizace. None je výchozí hodnota používaná TransactionScope u všech konstruktorů, které nepřijímají EnterpriseServicesInteropOption jako parametr.

Chcete-li kombinovat System.EnterpriseServices transakce s okolní transakcí, musíte použít buď Full, nebo Automatic. Obě tyto hodnoty spoléhají na funkci označovanou jako služby bez komponent, a proto byste měli být spuštěni v systému Windows XP Service Pack 2 nebo Windows Server 2003 při jejich použití.

Full určuje, že okolní transakce pro System.Transactions a System.EnterpriseServices jsou vždy stejné. Výsledkem je vytvoření nového System.EnterpriseServices transakčního kontextu a uplatnění transakce, která je aktuální pro TransactionScope, tak aby byla aktuální i pro daný kontext. Current Transakce je tedy zcela v synchronizaci s transakcí v Transaction. Tato hodnota představuje snížení výkonu, protože může být potřeba vytvořit nové kontexty modelu COM+.

Automatic určuje následující požadavky:

  • Pokud je Current zaškrtnutá, System.Transactions by měl podporovat transakce v kontextu COM+, pokud zjistí, že je spuštěn v jiném než výchozím kontextu. Všimněte si, že výchozí kontext nemůže obsahovat transakci. Proto se ve výchozím kontextu, a to i s Automatic, transakce uložená v místním úložišti vlákna, které používá System.Transactions, vrací pro Current.

  • Pokud je vytvořen nový TransactionScope objekt a vytvoření nastane v jiném kontextu než výchozí kontext, transakce, která je aktuální pro TransactionScope objekt by se měla promítnout do modelu COM+. V tomto případě se Automatic chová jako Full tím způsobem, že vytvoří nový kontext modelu COM+.

Kromě toho, pokud Current je nastavena v obou Full a Automatic, oba tyto režimy naznačují, že Current nelze nastavit přímo. Jakýkoli pokus nastavit Current přímo jinak než vytvořením TransactionScope má za následek InvalidOperationException. Hodnota EnterpriseServicesInteropOption výčtu je zděděna novými obory transakcí, které explicitně nezadávají, kterou hodnotu použít. Pokud například vytvoříte nový TransactionScope objekt s Fulla pak vytvoříte druhý TransactionScope objekt, ale nezadáte EnterpriseServicesInteropOption hodnotu, druhý TransactionScope objekt má Fulltaké hodnotu .

V souhrnu platí následující pravidla při vytváření nového oboru transakce:

  1. Current je zaškrtnuté, abyste zjistili, jestli se jedná o transakci. Výsledkem této kontroly je:

  2. Je zkontrolována hodnota výčtu TransactionScopeOption předaná pomocí konstruktorem TransactionScope. To určuje, zda je nutné vytvořit novou transakci.

  3. Pokud se má vytvořit nová transakce, výsledkem následujících hodnot EnterpriseServicesInteropOption je:

    • Full: Vytvoří se transakce přidružená k kontextu modelu COM+.

    • None: Vytvoří se System.Transactions transakce.

    • Automatic: Pokud existuje kontext modelu COM+, vytvoří se transakce a připojí se k kontextu.

Následující tabulka znázorňuje kontext služeb Enterprise Services (ES) a transakční obor, který vyžaduje transakci pomocí výčtu EnterpriseServicesInteropOption .

Kontext ES Žádné Automatický Úplný
Výchozí kontext Výchozí kontext Výchozí kontext Vytvořit nový
transakční kontext
Jiný než výchozí kontext Zachování kontextu klienta Vytvoření nového transakčního kontextu Vytvoření nového transakčního kontextu

Následující tabulka znázorňuje, co je okolní transakce v daném System.EnterpriseServices kontextu a jak transakční obor vyžaduje transakci pomocí výčtu EnterpriseServicesInteropOption.

Kontext ES Žádné Automatický Úplný
Výchozí kontext ST ST ES
Jiný než výchozí kontext ST ES ES

V předchozí tabulce: