Dela via


Använda System.Transactions i ASP.NET

Det här avsnittet beskriver hur du kan använda System.Transactions i ett ASP.NET program.

Aktivera DistributedTransactionPermission i ASP.NET

System.Transactions stöder delvis betrodda anropare och markeras med AllowPartiallyTrustedCallers attributet (APTCA). Förtroendenivåerna för System.Transactions definieras baserat på de typer av resurser (till exempel systemminne, delade processomfattande resurser, systemomfattande resurser och andra resurser) som System.Transactions exponeras och den förtroendenivå som ska krävas för att få åtkomst till dessa resurser. I en partisk förtroendemiljö kan en icke-fullständig förtroendesammansättning endast använda transaktioner inom programdomänen (i det här fallet är den enda resurs som skyddas systemminnet), såvida den inte beviljas DistributedTransactionPermission.

DistributedTransactionPermission krävs när transaktionshanteringen eskaleras för att hanteras av Microsoft Distributed Transaction Coordinator (MSDTC). Den här typen av scenario använder processomfattande resurser och särskilt en global resurs, vilket är det reserverade utrymmet i MSDTC-loggen. Ett exempel på den här användningen är en webbklientdel till en databas eller ett program som använder en databas som en del av de tjänster som den tillhandahåller.

ASP.NET har en egen uppsättning förtroendenivåer och associerar en specifik uppsättning behörigheter med dessa förtroendenivåer via principfiler. Mer information finns i ASP.NET Förtroendenivåer och principfiler. När du först installerar Windows SDK associeras ingen av standardfilerna ASP.NET princip med DistributedTransactionPermission. När din transaktion i ett ASP.NET program eskaleras så att den hanteras av MSDTC misslyckas eskalering med en SecurityException när du kräver DistributedTransactionPermission. Om du vill aktivera transaktionseskalering i en ASP.NET partiell förtroendemiljö bör du bevilja DistributedTransactionPermission samma standardförtroendenivåer som för SqlClientPermission. Du kan antingen konfigurera din egen anpassade förtroendenivå och principfil för att stödja detta, eller så kan du ändra standardprincipfilerna, som är Web_hightrust.config och Web_mediumtrust.config.

Om du vill ändra principfilerna lägger du till ett SecurityClass element för DistributedTransactionPermission i SecurityClasses elementet under elementet PolicyLevel och lägger till ett motsvarande IPermission element under ASP.NET NamedPermissionSet för System.Transactions. Följande konfigurationsfil visar detta.

<SecurityClasses>
   <SecurityClass Name="DistributedTransactionPermission" Description="System.Transactions.DistributedTransactionPermission, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
...
</SecurityClasses>

<PermissionSet
  class="NamedPermissionSet"
  version="1"
  Name="ASP.Net">
     <IPermission
        class="System.Transactions.DistributedTransactionPermission, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        version="1"
        Unrestricted="true"
     />
...
</PermissionSet>

Mer information om ASP.NET säkerhetsprincip finns i securityPolicy Element (ASP.NET Inställningar Schema).

Dynamisk kompilering

Om du vill importera och använda System.Transactions i ett ASP.NET program som är dynamiskt kompilerat vid åtkomst bör du placera en referens till System.Transactions sammansättningen i konfigurationsfilen. Mer specifikt bör referensen compilation/assemblies läggas till under avsnittet i standardkonfigurationsfilen web.config eller en specifik webbapps konfigurationsfil. I följande exempel visas detta.

<configuration>
   <system.web>
      <compilation>
         <assemblies>
      <add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
         </assemblies>
      </compilation>
   </system.web>
</configuration>

Mer information finns i lägga till Element för sammansättningar för kompilering (ASP.NET Inställningar schema).

Se även