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

Ative a Permissão de Transação Distribuída no ASP.NET

System.Transactions suporta chamadores parcialmente confiáveis e está 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 no nível de confiança que deve ser necessário para acessar esses recursos. Em um ambiente de confiança parcial, um assembly de confiança não total só pode usar transações dentro do Domínio do Aplicativo (neste caso, o único recurso protegido é a memória do sistema), a menos que lhe seja concedido o DistributedTransactionPermission.

DistributedTransactionPermission é exigido sempre que o gerenciamento de transações é escalado para ser gerenciado pelo Microsoft Distributed Transaction Coordinator (MSDTC). Esse tipo de cenário utiliza recursos de 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 diretiva de ASP.NET padrão está associado ao DistributedTransactionPermission. Como tal, quando a sua transação numa aplicação ASP.NET é escalada para ser gerida pelo MSDTC, o escalonamento falha com um SecurityException ao solicitar o DistributedTransactionPermission. Para permitir a escalação de transações num ambiente de confiança parcial do ASP.NET, deve conceder ao DistributedTransactionPermission os 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 pode 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 ao elemento SecurityClasses sob o elemento PolicyLevel e adicione um elemento IPermission correspondente sob o 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 diretiva de segurança, consulte securityPolicy Element (ASP.NET Settings Schema).

Compilação dinâmica

Se pretender importar e usar System.Transactions numa aplicação ASP.NET que é compilada dinamicamente no acesso, deve colocar uma referência à assemblagem System.Transactions no ficheiro 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 (ASP.NET esquema de configurações).

Ver também