Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe cómo puede usar System.Transactions correctamente dentro de una aplicación de ASP.NET.
Habilitación de 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 en función de los tipos de recursos (por ejemplo, memoria del sistema, recursos compartidos de todo el proceso, recursos de todo el sistema y otros recursos) que System.Transactions expone y el nivel de confianza que debe ser necesario para acceder a esos recursos. En un entorno de confianza parcial, un ensamblado que no sea de plena confianza solo puede usar 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 le conceda el DistributedTransactionPermission.
DistributedTransactionPermission se exige siempre que la administración de transacciones se escale para que la administre el Coordinador de transacciones distribuidas de Microsoft (MSDTC). Este tipo de escenario utiliza recursos de todo el proceso y, especialmente, un recurso global, que es el espacio reservado en el registro de MSDTC. Un ejemplo de este uso es un front-end web para 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 específico de permisos con estos niveles de confianza a través de archivos de directiva. Para obtener más información, consulte ASP.NET niveles de confianza y archivos de directiva. Al instalar inicialmente Windows SDK, ninguno de los archivos de directiva de ASP.NET predeterminados está asociado a 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. Para habilitar la escalación de transacciones en un entorno de confianza parcial de ASP.NET, debe otorgar a DistributedTransactionPermission los mismos niveles de confianza predeterminados que los de SqlClientPermission. Puede configurar su propio nivel de confianza personalizado y el archivo de directiva para admitir esto, o puede modificar los archivos de directiva predeterminados, que son Web_hightrust.config y Web_mediumtrust.config.
Para modificar los archivos de directiva, agregue un elemento SecurityClass para DistributedTransactionPermission al elemento SecurityClasses debajo del elemento PolicyLevel y agregue un elemento correspondiente IPermission debajo del ASP.NET NamedPermissionSet para System.Transactions. El siguiente archivo de configuración muestra esto.
<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 securityPolicy Element (esquema de configuración de ASP.NET) .
Compilación dinámica
Si desea importar y utilizar System.Transactions en una aplicación de ASP.NET que se compila dinámicamente al acceder, debe colocar una referencia al ensamblado System.Transactions en el archivo de configuración. En concreto, la referencia debe agregarse en la compilation/assemblies sección del archivo de configuración raíz predeterminado Web.config o en un archivo de configuración de una 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).