Delen via


System.Transactions gebruiken in ASP.NET

In dit onderwerp wordt beschreven hoe u System.Transactions succesvol kunt gebruiken in een ASP.NET-toepassing.

DistributedTransactionPermission inschakelen in ASP.NET

System.Transactions ondersteunt gedeeltelijk vertrouwde bellers en is gemarkeerd met het AllowPartiallyTrustedCallers kenmerk (APTCA). De vertrouwensniveaus voor System.Transactions worden gedefinieerd op basis van de typen resources (bijvoorbeeld systeemgeheugen, gedeelde procesbrede resources, systeembrede resources en andere resources) die System.Transactions blootlegt en het vereiste vertrouwensniveau om toegang te verkrijgen tot deze resources. In een omgeving met gedeeltelijk vertrouwen kan een assembly met gedeeltelijk vertrouwen alleen transacties binnen het toepassingsdomein gebruiken (in dit geval gaat het om het beschermen van systeemgeheugen), tenzij aan de assembly het DistributedTransactionPermission wordt verleend.

DistributedTransactionPermission wordt gevraagd wanneer transactiebeheer wordt geëscaleerd om te worden beheerd door de Microsoft Distributed Transaction Coordinator (MSDTC). Dit soort scenario maakt gebruik van procesbrede resources en met name een globale resource, de gereserveerde ruimte in het MSDTC-logboek. Een voorbeeld van dit gebruik is een webfront-end voor een database of een toepassing die gebruikmaakt van een database als onderdeel van de services die het biedt.

ASP.NET heeft een eigen set vertrouwensniveaus en koppelt een specifieke set machtigingen aan deze vertrouwensniveaus via beleidsbestanden. Zie ASP.NET Vertrouwensniveaus en beleidsbestanden voor meer informatie. Wanneer u de Windows SDK voor het eerst installeert, worden geen van de standaard-ASP.NET beleidsbestanden gekoppeld aan de DistributedTransactionPermission. Als zodanig, wanneer uw transactie in een ASP.NET toepassing wordt geëscaleerd om te worden beheerd door de MSDTC, mislukt de escalatie met een SecurityException bij het eisen van de DistributedTransactionPermission. Als u transactie-escalatie in een ASP.NET gedeeltelijke vertrouwensomgeving wilt inschakelen, moet u dezelfde DistributedTransactionPermission standaardvertrouwensniveaus toekennen als die van SqlClientPermission. U kunt uw eigen aangepaste vertrouwensniveau en -beleidsbestand configureren om dit te ondersteunen, of u kunt de standaardbeleidsbestanden wijzigen, die Web_hightrust.config en Web_mediumtrust.configzijn.

Als u de beleidsbestanden wilt wijzigen, voegt u een SecurityClass-element toe aan het DistributedTransactionPermission-element onder het SecurityClasses-element, en voegt u een bijbehorend PolicyLevel-element toe onder de ASP.NET IPermission voor System.Transactions. In het volgende configuratiebestand ziet u dit.

<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>

Zie securityPolicy Element (ASP.NET Settings Schema) voor meer informatie over ASP.NET beveiligingsbeleid.

Dynamische compilatie

Als u wilt importeren en gebruiken System.Transactions in een ASP.NET toepassing die dynamisch is gecompileerd bij toegang, moet u een verwijzing naar de System.Transactions assembly in het configuratiebestand plaatsen. In het bijzonder moet de verwijzing worden toegevoegd in de compilation/assemblies sectie van het standaard root Web.config configuratiebestand, of in het configuratiebestand van een specifieke webapplicatie. In het volgende voorbeeld ziet u dit.

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

Zie Element voor assembly's toevoegen voor compilatie (ASP.NET Instellingenschema) voor meer informatie.

Zie ook