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:
Current wordt gecontroleerd om te zien of er een transactie is. Deze controle resulteert in:
Een controle om te zien of er een bereik is.
Als er een bereik is, wordt de waarde van de EnterpriseServicesInteropOption opsomming die is doorgegeven toen het bereik in eerste instantie werd gemaakt, gecontroleerd.
Als de EnterpriseServicesInteropOption opsomming is ingesteld op Automatic, heeft de COM+-transactie (System.EnterpriseServices Transactie) voorrang op de System.Transactions transactie in de lokale opslag van beheerde threads.
Als de waarde is ingesteld op None, heeft de transactie in de System.Transactions lokale opslag van beheerde threads voorrang.
Als de waarde is, is Fuller slechts één transactie en is het een COM+-transactie.
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.
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:
ST betekent dat de omgevingstransactie van het bereik wordt beheerd door System.Transactions, gescheiden van de transactie van elke System.EnterpriseServices context die aanwezig kan zijn.
ES betekent dat de omgevingstransactie van het bereik gelijk is aan de System.EnterpriseServices contexttransactie.