Compartir a través de


Usar System.Transactions en ASP.NET

Este tema describe cómo se puede utilizar System.Transactions correctamente dentro de una aplicación ASP.NET.

Habilitar DistributedTransactionPermission en ASP.NET

System.Transactions admite los llamadores de confianza parcial y se marca con el atributo AllowPartiallyTrustedCallers (APTCA). Los niveles de confianza para System.Transactions se definen dependiendo de los tipos de recursos, por ejemplo, la memoria del sistema, los recursos de todo el proceso compartido, los recursos para todo el sistema y otros recursos. System.Transactions expone dichos tipos de recursos y el nivel de confianza que se debería exigir para tener acceso a ellos. En un entorno de confianza parcial, un ensamblado sin plena confianza puede usar solo las transacciones dentro del dominio de aplicación (en este caso, el único recurso que se protege es la memoria del sistema) a menos que se permita DistributedTransactionPermission.

Se exigeDistributedTransactionPermission cuando la administración de la transacción se escala para que el Coordinador de transacciones distribuidas de Microsoft (MSDTC) la administre. Este tipo de escenario usa recursos de todo el proceso y particularmente un recurso global, que es el espacio reservado en el registro de MSDTC. Un ejemplo de este uso es un front-end web con una base de datos o una aplicación que usa una base de datos como parte de los servicios que proporciona.

ASP.NET tiene su propio conjunto de niveles de confianza y asocia un conjunto concreto de permisos con estos niveles de confianza a través de los archivos de directivas. Para obtener más información, consulte ASP.NET niveles de confianza y archivos de directiva. Cuando se instala por primera vez el SDK de Windows, ninguno de los archivos de políticas predeterminados de ASP.NET está asociado con el DistributedTransactionPermission. Como tal, cuando su transacción en una aplicación ASP.NET realiza una escalada para ser administrada por MSDTC, se produce un error en la subida con SecurityException al exigir DistributedTransactionPermission. Debería permitir DistributedTransactionPermission en los mismos niveles de confianza predeterminados como aquéllos de SqlClientPermissionpara habilitar la subida de la transacción en un entorno confiable parcial de ASP.NET. Puede configurar su propio nivel de confianza personalizado y archivo de directivas para admitirlo o bien modificar los archivos de directivas predeterminados, Web_hightrust.config y Web_mediumtrust.config.

Para modificar los archivos de directivas, agregue un elemento SecurityClass para DistributedTransactionPermission al elemento SecurityClasses bajo el elemento PolicyLevel y agregue un elemento IPermission correspondiente bajo el ASP.NET NamedPermissionSet para System.Transactions. Esto se muestra en el siguiente archivo de configuración.

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

Para obtener más información sobre ASP.NET directiva de seguridad, vea Elemento securityPolicy ( Esquema de configuración ASP.NET)).

Compilación dinámica

Si desea importar y utilizar System.Transactions en una aplicación ASP.NET que está compilada dinámicamente en acceso, debería colocar una referencia al ensamblado System.Transactions en el archivo de configuración. La referencia debe agregarse en la sección compilation/assemblies del archivo de configuración Web.config raíz predeterminado, o en el archivo de configuración de la aplicación web específica. En el siguiente ejemplo se muestra cómo hacerlo.

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

Para más información, consulte Agregar elemento para ensamblajes para la compilación (Esquema de configuración de ASP.NET).

Consulte también