ASP.NET での System.Transactions の使用

ここでは、ASP.NET アプリケーション内で System.Transactions を正しく使用する方法について説明します。

ASP.NET での DistributedTransactionPermission の有効化

System.Transactions は、部分的に信頼された呼び出し側をサポートしており、AllowPartiallyTrustedCallers 属性 (APTCA) を使用してマークされます。System.Transactions の信頼レベルは、System.Transactions が公開するリソースの種類 (システム メモリ、共有プロセス全体のリソース、システム全体のリソース、その他のリソースなど)、およびそれらのリソースにアクセスするのに必要な信頼レベルに基づいて定義されます。部分的に信頼された環境では、DistributedTransactionPermission が付与されていない限り、完全に信頼されていないアセンブリは、アプリケーション ドメイン内でのみトランザクションを使用できます (この場合、保護されている唯一のリソースはシステム メモリです)。

Microsoft 分散トランザクション コーディネータ (MSDTC) によって管理されるようトランザクション管理がエスカレートされるたびに、DistributedTransactionPermission が要求されます。この種のシナリオでは、プロセス全体のリソースと特にグローバルなリソースを使用します。グローバルなリソースは、MSDTC ログで予約されたスペースです。この使用方法の例として、データベース、または供給するサービスの一部としてデータベースを使用するアプリケーションへの Web フロントエンドがあります。

ASP.NET は、独自の信頼レベル セットを持ち、ポリシー ファイルを介して特定のアクセス許可セットをこれらの信頼レベルに関連付けます。詳細については、「ASP.NET Trust Levels and Policy Files」を参照してください。 を最初にインストールした時点では、既定の ASP.NET ポリシー ファイルは DistributedTransactionPermission に関連付けられていません。そのため、ASP.NET アプリケーションのトランザクションが MSDTC によって管理されるようエスカレートされると、DistributedTransactionPermission を要求した時点で、SecurityException によりエスカレーションが失敗します。部分的に信頼された ASP.NET の環境でトランザクションのエスカレーションを有効にするには、SqlClientPermission と同じ既定の信頼レベルで、DistributedTransactionPermission を付与する必要があります。これをサポートする独自のカスタム信頼レベルとポリシー ファイルを構成するか、または既定のポリシー ファイルである Web_hightrust.config および Web_mediumtrust.config を変更できます。

ポリシー ファイルを変更するには、System.Transactions について、DistributedTransactionPermissionSecurityClass 要素を PolicyLevel 要素下の SecurityClasses 要素に追加し、さらに ASP.NET NamedPermissionSet 下の対応する IPermission 要素を追加します。次の構成ファイルに、この例を示します。

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

ASP.NET のセキュリティ ポリシーについては、「<securityPolicy> Element」を参照してください。

動的なコンパイル

アクセス時に動的にコンパイルされる ASP.NET アプリケーションで System.Transactions をインポートして使用する場合、構成ファイルに System.Transactions アセンブリへの参照を配置する必要があります。具体的には、既定のルートの Web.config 構成ファイル、または特定の Web アプリケーションの構成ファイルの compilation/assemblies セクションに、この参照を追加する必要があります。次にコード例を示します。

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

詳細については、「add Element for <assemblies> for <compilation>」を参照してください。

関連項目

概念

トランザクション管理のエスカレーション

その他の技術情報

ASP.NET Trust Levels and Policy Files
ASP.NET <securityPolicy> Element

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.