Delen via


Interoperabiliteit met Enterprise Services en COM+-transacties

De System.Transactions naamruimte ondersteunt interoperabiliteit tussen transactieobjecten die zijn gemaakt met behulp van deze naamruimte en transacties die zijn gemaakt via COM+.

U kunt de EnterpriseServicesInteropOption opsomming gebruiken wanneer u een nieuw TransactionScope exemplaar maakt om het interoperabiliteitsniveau met COM+op te geven.

Wanneer uw toepassingscode de statische Current eigenschap controleert, System.Transactions wordt standaard geprobeerd een transactie te zoeken die anders actueel is of een TransactionScope object dat null bepaalt Current . Als een van deze twee niet kan worden gevonden, System.Transactions voert u een query uit op de COM+-context voor een transactie. Houd er rekening mee dat hoewel System.Transactions een transactie uit de COM+-context kan worden gevonden, het nog steeds de voorkeur geeft aan transacties die systeemeigen zijn.System.Transactions

Interoperabiliteitsniveaus

De EnterpriseServicesInteropOption opsomming definieert de volgende interoperabiliteitsniveaus,NoneFull en Automatic.

De TransactionScope klasse biedt constructors die accepteren EnterpriseServicesInteropOption als een parameter.

None, zoals de naam al aangeeft, impliceert dat er geen interoperabiliteit is tussen System.EnterpriseServices contexten en transactiebereiken. Nadat u een TransactionScope object hebt gemaakt met None, worden eventuele wijzigingen Current niet doorgevoerd in de COM+-context. Op dezelfde manier worden wijzigingen in de transactie in de COM+-context niet doorgevoerd in Current. Dit is de snelste bewerkingsmodus System.Transactions omdat er geen extra synchronisatie vereist is. None is de standaardwaarde die wordt gebruikt door TransactionScope alle constructors die niet als parameter accepteren EnterpriseServicesInteropOption .

Als u transacties wilt combineren System.EnterpriseServices met uw omgevingstransactie, moet u een Full van beide gebruiken of Automatic. Beide waarden zijn afhankelijk van een functie die services zonder onderdelen wordt genoemd, en daarom moet u worden uitgevoerd op Windows XP Service Pack 2 of Windows Server 2003 wanneer u deze gebruikt.

Full geeft aan dat de omgevingstransacties voor System.Transactions en System.EnterpriseServices altijd hetzelfde zijn. Het resulteert in het maken van een nieuwe System.EnterpriseServices transactionele context en het toepassen van de transactie die actueel is voor de TransactionScope huidige voor die context. Als zodanig is de transactie Current volledig in synchronisatie met de transactie in Transaction. Deze waarde introduceert een prestatiestraf omdat er mogelijk nieuwe COM+-contexten moeten worden gemaakt.

Automatic geeft de volgende vereisten op:

  • Wanneer Current deze optie is ingeschakeld, System.Transactions moet u transacties in de COM+-context ondersteunen als wordt gedetecteerd dat deze wordt uitgevoerd in een andere context dan de standaardcontext. Houd er rekening mee dat de standaardcontext geen transactie kan bevatten. Daarom wordt in de standaardcontext, zelfs met, Automaticde transactie die is opgeslagen in de lokale threadopslag die door System.Transactions wordt gebruikt, geretourneerd voor Current.

  • Als er een nieuw TransactionScope object wordt gemaakt en het maken plaatsvindt in een andere context dan de standaardcontext, moet de transactie die actueel is voor het TransactionScope object worden weergegeven in COM+. In dit geval Automatic gedraagt het zich alsof Full er een nieuwe COM+ context wordt gemaakt.

Wanneer Current beide modi zijn ingesteld Full Automaticen beide modi impliceren dat Current deze niet rechtstreeks kunnen worden ingesteld. Elke poging om rechtstreeks in te stellen Current dan het maken van een TransactionScope resultaat in een InvalidOperationException. De EnterpriseServicesInteropOption opsommingswaarde wordt overgenomen door nieuwe transactiebereiken die niet expliciet aangeven welke waarde moet worden gebruikt. Als u bijvoorbeeld een nieuw TransactionScope object maakt met Fullen vervolgens een tweede TransactionScope object maakt, maar geen waarde opgeeft EnterpriseServicesInteropOption , heeft het tweede TransactionScope object ook een Full.

Kortom, de volgende regels zijn van toepassing bij het maken van een nieuw transactiebereik:

  1. Current wordt gecontroleerd om te zien of er een transactie is. Deze controle resulteert in:

  2. De waarde van de TransactionScopeOption opsomming die door de TransactionScope constructor is doorgegeven, wordt gecontroleerd. Hiermee wordt bepaald of er een nieuwe transactie moet worden gemaakt.

  3. Als er een nieuwe transactie moet worden gemaakt, worden de volgende waarden van EnterpriseServicesInteropOption het resultaat weergegeven:

    • Full: er wordt een transactie gemaakt die is gekoppeld aan een COM+-context.

    • None: er wordt een System.Transactions transactie gemaakt.

    • Automatic: als er een COM+-context is, wordt er een transactie gemaakt en gekoppeld aan de context.

In de volgende tabel ziet u de ES-context (Enterprise Services) en een transactioneel bereik waarvoor een transactie is vereist met behulp van de EnterpriseServicesInteropOption opsomming.

ES-context Geen Automatisch Volledig
Standaardcontext Standaardcontext Standaardcontext Nieuwe maken
transactionele context
Niet-standaardcontext De context van de client onderhouden Nieuwe transactionele context maken Nieuwe transactionele context maken

In de volgende tabel ziet u wat de omgevingstransactie is, gezien een bepaalde System.EnterpriseServices context en een transactioneel bereik waarvoor een transactie is vereist met behulp van de EnterpriseServicesInteropOption opsomming.

ES-context Geen Automatisch Volledig
Standaardcontext ST ST ES
Niet-standaardcontext ST ES ES

In de voorgaande tabel: