Compartilhar via


Usando System.Transactions no ASP.NET

Este tópico descreve como você pode usar System.Transactions com êxito dentro de um aplicativo ASP.NET.

Habilitar DistributedTransactionPermission no ASP.NET

System.Transactions dá suporte a chamadores parcialmente confiáveis e é marcado com o AllowPartiallyTrustedCallers atributo (APTCA). Os níveis de confiança para System.Transactions são definidos com base nos tipos de recursos (por exemplo, memória do sistema, recursos compartilhados em todo o processo, recursos em todo o sistema e outros recursos) que System.Transactions expõe e o nível de confiança necessário para acessar esses recursos. Em um ambiente de confiança parcial, um assembly de confiança não completo só pode usar transações dentro do Domínio do Aplicativo (nesse caso, o único recurso que está sendo protegido é a memória do sistema), a menos que seja concedido o DistributedTransactionPermission.

DistributedTransactionPermission é exigido sempre que o gerenciamento de transações é escalonado para ser gerenciado pelo MSDTC (Coordenador de Transações Distribuídas da Microsoft). Esse tipo de cenário utiliza recursos em todo o processo e, particularmente, um recurso global, que é o espaço reservado no log do MSDTC. Um exemplo desse uso é um front-end da Web para um banco de dados ou um aplicativo que usa um banco de dados como parte dos serviços que ele fornece.

ASP.NET tem seu próprio conjunto de níveis de confiança e associa um conjunto específico de permissões a esses níveis de confiança por meio de arquivos de política. Para obter mais informações, consulte ASP.NET níveis de confiança e arquivos de política. Quando você instala inicialmente o SDK do Windows, nenhum dos arquivos de política de ASP.NET padrão é associado ao DistributedTransactionPermission. Assim, quando sua transação em um aplicativo ASP.NET for escalonada para ser gerenciada pelo MSDTC, o escalonamento falhará com um SecurityException após exigir DistributedTransactionPermission. Para habilitar o escalonamento de transações em um ambiente de confiança parcial ASP.NET, você deve conceder os DistributedTransactionPermission mesmos níveis de confiança padrão que os de SqlClientPermission. Você pode configurar seu próprio nível de confiança personalizado e arquivo de política para dar suporte a isso ou modificar os arquivos de política padrão, que são Web_hightrust.config e Web_mediumtrust.config.

Para modificar os arquivos de política, adicione um elemento SecurityClass para DistributedTransactionPermission dentro do elemento SecurityClasses sob o elemento PolicyLevel e adicione um elemento correspondente IPermission dentro do ASP.NET NamedPermissionSet para System.Transactions. O arquivo de configuração a seguir demonstra isso.

<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 obter mais informações sobre ASP.NET política de segurança, consulte securityPolicy Element (ASP.NET Settings Schema).

Compilação dinâmica

Se você quiser importar e usar System.Transactions em um aplicativo ASP.NET que é compilado dinamicamente no acesso, coloque uma referência ao System.Transactions assembly no arquivo de configuração. Especificamente, a referência deve ser adicionada na compilation/assemblies seção do arquivo de configuração de Web.config raiz padrão ou no arquivo de configuração de um aplicativo Web específico. O exemplo a seguir demonstra isso.

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

Para obter mais informações, consulte adicionar Elemento para assemblies para compilação (esquema de configurações de ASP.NET).

Consulte também