在 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 管理时,升级就会失败,并引发有关要求 DistributedTransactionPermissionSecurityException 异常。若要在 ASP.NET 部分信任环境中启用事务升级,应该用与 SqlClientPermission 相同的默认信任级别授予 DistributedTransactionPermission。您可以配置自己的自定义信任级别和策略文件来支持这一方法,也可以修改默认策略文件(即 Web_hightrust.configWeb_mediumtrust.config)。

若要修改策略文件,请将 DistributedTransactionPermissionSecurityClass 元素添加到 PolicyLevel 元素下的 SecurityClasses 元素中,并在 System.Transactions 的 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

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。