Interoperabilita se službami Enterprise Services a transakcemi modelu COM+
System.Transactions Obor názvů podporuje spolupráci mezi objekty transakce vytvořené pomocí tohoto oboru názvů a transakce vytvořené pomocí modelu COM +.
Můžete použít EnterpriseServicesInteropOption výčet při vytváření nového TransactionScope instance k zadání ú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 Current null. Pokud tento soubor nelze nalézt jednu z těchto System.Transactions dotazuje kontext modelu COM + pro transakci. Všimněte si, že i když System.Transactions setkat s transakcí z modelu COM + kontextu, stále upřednostňuje transakcí, které jsou pro nativní System.Transactions.
Interoperabilita úrovně
EnterpriseServicesInteropOption Výčet definuje následující úrovně interoperability –None, Full a Automatic.
TransactionScope Třída 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í TransactionScope objekt s None, veškeré změny Current se neprojeví v daném kontextu. Podobně změny transakce v rámci modelu COM + se neprojeví v Current. Jedná se o nejrychlejší režim operaci pro System.Transactions vzhledem k tomu, že neexistuje žádná další synchronizace vyžadována. None je výchozí hodnota používaná TransactionScope u všech konstruktorů, které nejsou přijímána EnterpriseServicesInteropOption jako parametr.
Pokud chcete sloučit System.EnterpriseServices transakce s okolí transakci, je nutné použít buď Full nebo Automatic. Oba tyto hodnoty jsou závislé na funkci služby bez součástí a proto vám by měl být spuštěn v systému Windows XP Service Pack 2 nebo Windows Server 2003 při jejich používání.
Full určuje, že okolní transakce pro System.Transactions a System.EnterpriseServices jsou vždy stejné. Je výsledkem vytvoření nového System.EnterpriseServices transakční kontextu a transakcí, která byla platná pro použití TransactionScope je aktuální pro tento kontext. Jako takový transakce v Current je zcela synchronizaci s transakcí v Transaction. Tato hodnota představuje snížení výkonu vzhledem k tomu, že nový modelu COM + kontexty může být nutné k vytvoření.
Automatic určuje následující požadavky:
Při Current je zaškrtnuto, System.Transactions by měl podporu transakcí v rámci modelu COM +, jestliže zjistí, zda je spuštěna v kontextu jiných než výchozí kontext. Všimněte si, že výchozí kontext nemůže obsahovat transakcí. Proto ve výchozím kontextu, dokonce i s Automatic, transakce uložený v místním úložišti podprocesů používaný System.Transactions je vrácena pro Current.
Pokud nový TransactionScope objekt je vytvořen a dojde k vytvoření v jiném kontextu než výchozí kontext transakce, která je pro aktuální TransactionScope objekt by měl být projeví v modelu COM +. V takovém případě Automatic se chová jako Full v tom, vytvoří nový kontext modelu COM +.
Kromě toho při Current je nastavena v obou Full a Automatic, obou těchto režimech znamenat, že Current nelze nastavit přímo. Žádný pokus o nastavení Current přímo jiné než vytváření TransactionScope vede InvalidOperationException. EnterpriseServicesInteropOption Hodnota výčtu zdědí nové obory transakce, které explicitně neurčí hodnotu, která se má použít. Například, pokud vytvoříte nový TransactionScope objekt s Fulla potom vytvořte druhý TransactionScope objektu, ale ne EnterpriseServicesInteropOption hodnotu, druhá TransactionScope objekt má také Full.
V souhrnu při vytváření nového oboru transakce platí následující pravidla:
Current je zaškrtnuté, abyste zjistili, jestli se jedná o transakci. Výsledkem této kontrole:
Kontrola, zda je obor.
Pokud je obor, hodnota EnterpriseServicesInteropOption výčet předané v případě oboru bylo původně vytvořeno je zaškrtnuto.
Pokud EnterpriseServicesInteropOption výčtu je nastavena na Automatic, transakce modelu COM + (System.EnterpriseServices transakce) má přednost před System.Transactions transakce v místním úložišti spravované vlákno.
Pokud hodnota je nastavena None, System.Transactions transakce v místním úložišti spravované vlákno přednost.
Pokud je hodnota Full, existuje pouze jeden transakce a je transakce modelu COM +.
Hodnota TransactionScopeOption výčet předaných v TransactionScope konstruktor je zaškrtnuto. Určuje, zda je nutné vytvořit novou transakci.
Pokud novou transakci má být vytvořen, následující hodnoty EnterpriseServicesInteropOption za následek:
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žby Enterprise (ES) a transakční obor, který vyžaduje, aby transakce pomocí EnterpriseServicesInteropOption výčtu.
Kontext ES | Nic | Automatic (Automaticky) | Úplný |
---|---|---|---|
Výchozí kontext | Výchozí kontext | Výchozí kontext | Vytvořit nový transakční kontextu |
Jiné než výchozí kontext | Udržovat kontextu klienta | Vytvořit nový transakční kontext | Vytvořit nový transakční kontext |
Následující tabulka popisuje, co okolí transakce je, daný konkrétní System.EnterpriseServices kontextu a transakční obor, který vyžaduje, aby transakce pomocí EnterpriseServicesInteropOption výčtu.
Kontext ES | Nic | Automatic (Automaticky) | Úplný |
---|---|---|---|
Výchozí kontext | ST | ST | ES |
Jiné než výchozí kontext | ST | ES | ES |
V tabulce:
ST znamená spravuje okolí transakce oboru System.Transactions, nezávisle na jakékoli System.EnterpriseServices daného kontextu transakce, které mohou být k dispozici.
ES znamená, že oboru okolí transakce je stejná jako System.EnterpriseServices transakce daného kontextu.