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.

Habilite DistributedTransactionPermission 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 sua transação em um aplicativo ASP.NET é escalada para ser gerenciada pelo MSDTC, o escalonamento falha com um SecurityException ao exigir o 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 SqlClientPermissionconfiança padrão do . 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 SecurityClass elemento for ao SecurityClasses elemento sob DistributedTransactionPermission o PolicyLevel elemento e adicione um elemento correspondente IPermission 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 você quiser importar e usar System.Transactions em um aplicativo ASP.NET que é compilado System.Transactions dinamicamente no acesso, você deve colocar uma referência ao assembly no arquivo de configuração. Especificamente, a referência deve ser adicionada na compilation/assemblies seção do arquivo de configuração 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).

Consulte também