Dela via


Samverkan med Enterprise Services och COM+-transaktioner

Namnområdet System.Transactions stöder samverkan mellan transaktionsobjekt som skapats med hjälp av det här namnområdet och transaktioner som skapats via COM+.

Du kan använda EnterpriseServicesInteropOption uppräkningen när du skapar en ny TransactionScope instans för att ange nivån för samverkan med COM+.

När programkoden kontrollerar den statiska Current egenskapen System.Transactions försöker du som standard söka efter en transaktion som annars är aktuell eller ett TransactionScope objekt som dikterar att det Current är null. Om den inte hittar något av dessa frågar System.Transactions du COM+-kontexten för en transaktion. Observera att även om System.Transactions en transaktion kan hittas från COM+-kontexten, gynnar den fortfarande transaktioner som är inbyggda i System.Transactions.

Samverkansnivåer

Uppräkningen EnterpriseServicesInteropOption definierar följande nivåer av samverkan –NoneFull och Automatic.

Klassen TransactionScope innehåller konstruktorer som accepterar EnterpriseServicesInteropOption som en parameter.

None, som namnet antyder, innebär att det inte finns någon samverkan mellan System.EnterpriseServices kontexter och transaktionsomfång. När du har skapat ett TransactionScope objekt med Noneåterspeglas inte eventuella ändringar Current i COM+-kontexten. På samma sätt återspeglas inte ändringar i transaktionen i COM+-kontexten i Current. Det här är det snabbaste åtgärdsläget för System.Transactions eftersom det inte krävs någon extra synkronisering. None är standardvärdet som används av TransactionScope med alla konstruktorer som inte accepterar EnterpriseServicesInteropOption som en parameter.

Om du vill kombinera System.EnterpriseServices transaktioner med din omgivande transaktion måste du använda antingen Full eller Automatic. Båda dessa värden förlitar sig på en funktion som kallas tjänster utan komponenter, och därför bör du köra på Windows XP Service Pack 2 eller Windows Server 2003 när du använder dem.

Full anger att de omgivande transaktionerna för System.Transactions och System.EnterpriseServices alltid är desamma. Det resulterar i att skapa en ny System.EnterpriseServices transaktionskontext och tillämpa den transaktion som är aktuell för att vara aktuell för den kontexten TransactionScope . Därför är transaktionen i Current helt synkroniserad med transaktionen i Transaction. Det här värdet introducerar en prestandastraff eftersom nya COM+-kontexter kan behöva skapas.

Automatic anger följande krav:

  • När Current är markerat System.Transactions bör ha stöd för transaktioner i COM+-kontexten om den upptäcker att den körs i en annan kontext än standardkontexten. Observera att standardkontexten inte kan innehålla en transaktion. I standardkontexten returneras Automaticdärför transaktionen som lagras i den lokala trådlagringen som används av System.Transactions för Current.

  • Om ett nytt TransactionScope objekt skapas och skapandet sker i en annan kontext än standardkontexten ska transaktionen som är aktuell för TransactionScope objektet återspeglas i COM+. I det här fallet Automatic fungerar det som Full när det skapar en ny COM+-kontext.

När anges i båda Full lägena och Automaticinnebär båda dessa lägen dessutom Current att de Current inte kan ställas in direkt. Alla försök att ställa in Current direkt förutom att skapa ett TransactionScope resultat i en InvalidOperationException. Uppräkningsvärdet EnterpriseServicesInteropOption ärvs av nya transaktionsomfång som inte uttryckligen anger vilket värde som ska användas. Om du till exempel skapar ett nytt TransactionScope objekt med Fulloch sedan skapar ett andra TransactionScope objekt men inte anger något EnterpriseServicesInteropOption värde, har det andra TransactionScope objektet även ett Full.

Sammanfattningsvis gäller följande regler när du skapar ett nytt transaktionsomfång:

  1. Current kontrolleras för att se om det finns en transaktion. Den här kontrollen resulterar i:

  2. Värdet för uppräkningen TransactionScopeOption som skickas in av TransactionScope konstruktorn kontrolleras. Detta avgör om en ny transaktion måste skapas.

  3. Om en ny transaktion ska skapas resulterar följande värden EnterpriseServicesInteropOption i:

    • Full: en transaktion som är associerad med en COM+-kontext skapas.

    • None: en System.Transactions transaktion skapas.

    • Automatic: Om det finns en COM+-kontext skapas en transaktion och kopplas till kontexten.

Följande tabell illustrerar ES-kontexten (Enterprise Services) och ett transaktionsomfång som kräver en transaktion med uppräkningen EnterpriseServicesInteropOption .

ES-kontext Ingen Automatisk Fullständig
Standardkontext Standardkontext Standardkontext Skapa ny
transaktionskontext
Icke-standardkontext Underhålla klientens kontext Skapa ny transaktionskontext Skapa ny transaktionskontext

I följande tabell visas vad den omgivande transaktionen är, givet en viss System.EnterpriseServices kontext, och ett transaktionsomfång som kräver en transaktion med uppräkningen EnterpriseServicesInteropOption .

ES-kontext Ingen Automatisk Fullständig
Standardkontext :A :A ES
Icke-standardkontext :A ES ES

I föregående tabell: