Freigeben über


Interoperabilität mit Enterprise Services und COM+-Transaktionen

[Dieses Thema ist Teil der Vorabdokumentation und kann in zukünftigen Versionen geändert werden. Leere Themen wurden als Platzhalter eingefügt.]

Der System.Transactions-Namespace unterstützt die Interoperabilität zwischen Transaktionsobjekten, die in diesem Namespace erstellt wurden, und mit COM+ erstellten Transaktionen.

Mithilfe der EnterpriseServicesInteropOption-Enumeration können Sie beim Erstellen einer neuen TransactionScope-Instanz das Maß an Interoperabilität mit COM+ festlegen.

Wenn der Anwendungscode die statische Current-Eigenschaft überprüft, versucht System.Transactions standardmäßig eine Transaktion zu finden, die ansonsten aktuell ist, oder ein TransactionScope-Objekt zu finden, das erzwingt, dass Current den Wert null hat. Wenn weder eine Transaktion noch ein Objekt gefunden werden kann, die bzw. das diese Bedingungen erfüllt, fragt System.Transactions eine Transaktion aus dem COM+-Kontext ab. Beachten Sie, dass System.Transactions auch dann systemeigene System.Transactions-Transaktionen bevorzugt, wenn eine Transaktion im COM+-Kontext gefunden wird

Interoperabilitätsstufen

Die EnterpriseServicesInteropOption-Enumeration definiert die Interoperabilitätsstufen None, Full und Automatic.

Die TransactionScope-Klasse stellt Konstruktoren bereit, die EnterpriseServicesInteropOption als Parameter akzeptieren.

None zeigt an, dass keine Interoperabilität zwischen System.EnterpriseServices-Kontexten und Transaktionsbereichen gegeben ist. Wenn ein TransactionScope-Objekt mit None erstellt wurde, werden die Änderungen an Current nicht im COM+-Kontext widergespiegelt. Ebenso werden Änderungen an Transaktionen im COM+-Kontext nicht in Current widergespiegelt. Dies ist der schnellste Betriebsmodus von System.Transactions, weil keine zusätzliche Synchronisierung erforderlich ist. None wird von TransactionScope als Standardwert für alle Konstruktoren verwendet, die EnterpriseServicesInteropOption nicht als Parameter akzeptieren.

Wenn Sie System.EnterpriseServices-Transaktionen mit einer Ambient-Transaktion kombinieren möchten, müssen Sie entweder Full oder Automatic angeben. Beide Werte setzen eine Funktion namens Dienste ohne Komponenten voraus, und daher sollte beim Einsatz dieser Werte auf dem Computer Windows XP Service Pack 2 oder Windows Server 2003 verwendet werden.

Full gibt an, dass die Ambient-Transaktionen für System.Transactions und System.EnterpriseServices immer gleich sind. Daraufhin wird ein neuer System.EnterpriseServices-Transaktionskontext erstellt, und die Transaktion, die im TransactionScope aktuell ist, wird für diesen Kontext als aktuelle Transaktion übernommen. Folglich stimmt die Transaktion in Current völlig mit der Transaktion in Transaction überein. Durch diesen Wert wird die Leistung beeinträchtigt, da möglicherweise neue COM+-Kontexte erstellt werden müssen.

Automatic definiert die folgenden Anforderungen:

  • Wenn Current überprüft wird, sollte System.Transactions Transaktionen im COM+-Kontext unterstützen, wenn das Transaktionssystem erkennt, dass es in einem anderen Kontext als dem Standardkontext ausgeführt wird. Beachten Sie, dass der Standardkontext keine Transaktion enthalten kann. Im Standardkontext wird daher auch bei der Einstellung Automatic die Transaktion, die im lokalen von System.Transactions verwendeten Threadspeicher gespeichert wird, für Current zurückgegeben.

  • Wenn ein neues TransactionScope-Objekt erstellt wird, und die Erstellung in einem anderen Kontext als dem Standardkontext erfolgt, dann sollte die Transaktion, die für das TransactionScope-Objekt aktuell ist, in COM+ widergespiegelt werden. In diesem Fall verhält sich Automatic insofern wie Full, als dass ein neuer COM+-Kontext erstellt wird.

Wenn Current sowohl in Full als auch in Automatic festgelegt wurde, bewirken diesen beiden Modi, dass Current nicht direkt festgelegt werden kann. Jeder Versuch, Current direkt und nicht durch die Erstellung eines InvalidOperationException-Objekts festzulegen, resultiert in einer Ausnahme des Typs TransactionScope. Der EnterpriseServicesInteropOption-Enumerationswert wird an neue Transaktionsbereiche vererbt, für die nicht explizit festgelegt wird, welcher Wert verwendet erden soll. Wenn Sie beispielsweise ein TransactionScope-Objekt unter Angabe von Full erstellen, und dann ein zweites TransactionScope-Objekt erstellen, aber keinen EnterpriseServicesInteropOption-Wert angeben, verfügt das zweite TransactionScope-Objekt ebenso über die Einstellung Full.

Zusammenfasst gelten die folgenden Regeln für die Erstellung eines neuen Transaktionsbereichs:

  1. Current wird überprüft, um festzustellen, ob eine Transaktion vorhanden ist. Diese Prüfung resultiert in:

    • Eine Prüfung, um festzustellen, ob ein Bereich vorhanden ist.

    • Wenn ein Bereich vorhanden ist, wird überprüft, welcher Wert der EnterpriseServicesInteropOption-Enumeration bei der ursprünglichen Erstellung des Bereichs übergeben wurde.

    • Wenn die EnterpriseServicesInteropOption-Enumeration auf Automatic festgelegt wurde, dann hat die COM+-Transaktion (System.EnterpriseServices-Transaktion) Vorrang vor der System.Transactions-Transaktion im verwalteten lokalen Threadspeicher.

      Wenn der Wert auf None festgelegt wurde, dann hat die System.Transactions-Transaktion im verwalteten lokalen Threadspeicher Vorrang.

      Wenn der Wert Full lautet, ist nur eine Transaktion vorhanden, und dies ist eine COM+-Transaktion.

  2. Es wird der Wert der TransactionScopeOption-Enumeration überprüft, der vom TransactionScope-Konstruktor übergeben wird. Damit wird bestimmt, ob eine neue Transaktion erstellt werden muss.

  3. Wenn eine neue Transaktion erstellt werden muss, bewirken die folgenden Werte von EnterpriseServicesInteropOption Folgendes:

    • Full: Es wird eine dem COM+-Kontext zugeordnete Transaktion erstellt.

    • None: Es wird eine System.Transactions-Transaktion erstellt.

    • Automatic: Wenn ein COM+-Kontext vorhanden ist, wird eine Transaktion erstellt und dem Kontext zugeordnet.

Die folgende Tabelle veranschaulicht den Enterprise Services (ES)-Kontext und einen Transaktionsbereich, der erfordert, dass Transaktionen die EnterpriseServicesInteropOption-Enumeration verwenden.

ES-Kontext Keiner Automatisch Vollständig

Standardkontext

Standardkontext

Standardkontext

Einen neuen
Transaktionskontext erstellen

Kein Standardkontext

Den Kontexts des Clients beibehalten

Einen neuen Transaktionskontext erstellen

Einen neuen Transaktionskontext erstellen

Die folgende Tabelle zeigt, welche Art von Ambient-Transaktion eingesetzt wird, wenn ein bestimmter System.EnterpriseServices-Kontext und ein Transaktionsbereich gegeben sind, der eine Transaktion erfordert, in der die EnterpriseServicesInteropOption-Enumeration verwendet wird.

ES-Kontext Keiner Automatisch Vollständig

Standardkontext

ST

ST

ES

Kein Standardkontext

ST

ES

ES

Erläuterungen zur vorstehenden Tabelle:

  • ST bedeutet, dass die Ambient-Transaktion des Bereichs von System.Transactions getrennt von allen anderen gegebenenfalls vorhandenen Transaktionen des System.EnterpriseServices-Kontexts verwaltet wird.

  • ES bedeutet, dass die Ambient-Transaktion des Bereichs mit der Transaktion des System.EnterpriseServices-Kontexts identisch ist.