Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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, probeert System.Transactions standaard een transactie te zoeken die anders actueel is, of een TransactionScope object dat bepaalt dat Currentnull is. Als een van deze twee niet kan worden gevonden, voert System.Transactions een query uit op de COM+-context voor een transactie. Houd er rekening mee dat hoewel System.Transactions een transactie in de COM+-context kan vinden, het nog steeds de voorkeur geeft aan transacties die afkomstig zijn van 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 met None hebt gemaakt, worden wijzigingen in Current niet weerspiegeld 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 door TransactionScope wordt gebruikt voor alle constructors die EnterpriseServicesInteropOption niet als parameter accepteren.
Als u System.EnterpriseServices transacties wilt combineren met uw omgevingstransactie, moet u ofwel Full of Automatic gebruiken. Beide waarden zijn afhankelijk van een functie die services zonder onderdelen wordt genoemd, en daarom moet u werken met 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 ervoor zorgen dat de transactie die actueel is voor de TransactionScope ook actueel is in 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 is ingeschakeld, moet System.Transactions transacties in de COM+-context ondersteunen als wordt gedetecteerd dat het in een andere context dan de standaardcontext wordt uitgevoerd. Houd er rekening mee dat de standaardcontext geen transactie kan bevatten. Daarom wordt in de standaardcontext, zelfs met Automatic, de transactie die is opgeslagen in de lokale threadopslag die door System.Transactions wordt gebruikt, voor Current geretourneerd.
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 gedraagt Automatic zich als Full doordat er een nieuwe COM+ context wordt gecreëerd.
Daarnaast wanneer Current is ingesteld in zowel Full als Automatic, betekent dit dat Current niet direct kan worden ingesteld. Elke poging om Current direct in te stellen anders dan het creëren van een TransactionScope leidt tot 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 reikwijdte 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 aangemaakt, resulteren de volgende waarden van EnterpriseServicesInteropOption in:
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 omgevings-transactie van het bereik wordt beheerd door System.Transactions, los van elke transactie van de System.EnterpriseServices context die aanwezig kan zijn.
ES betekent dat de omgevingstransactie van het bereik gelijk is aan de System.EnterpriseServices contexttransactie.