共用方式為


在 ASP.NET 中使用 System.Transactions

本主題描述如何在 ASP.NET 應用程式中成功使用 System.Transactions

在 ASP.NET 中啟用 DistributedTransactionPermission

System.Transactions 支援部分信任的呼叫端,並具有 AllowPartiallyTrustedCallers 屬性(APTCA)。 System.Transactions 的信任等級是根據資源類型(例如系統記憶體、共享進程範圍資源、全系統資源和其他資源)以及存取這些資源所需的信任層級來定義的,這些資源是由 System.Transactions 所公開的。 在部分信任環境中,非完全信任元件只能在應用程式域內使用交易(在此情況下,唯一受保護的資源是系統記憶體),除非授與 DistributedTransactionPermission

DistributedTransactionPermission 是在每當交易管理升級為由 Microsoft 分散式交易協調器 (MSDTC) 管理時所需求的。 這種類型的情境會利用跨進程的資源,尤其是全局資源,即 MSDTC 記錄中的保留空間。 此使用方式的範例是資料庫的 Web 前端,或是使用資料庫做為其所提供服務一部分的應用程式。

ASP.NET 有自己的信任層級,並透過原則檔案,將一組特定的許可權與這些信任層級產生關聯。 如需詳細資訊,請參閱 ASP.NET 信任層級和原則檔案。 當您一開始安裝 Windows SDK 時,預設 ASP.NET 原則檔案都不會與 DistributedTransactionPermission相關聯。 因此,當您在 ASP.NET 應用程式中的交易升級以由 MSDTC 管理時,在要求 SecurityException 時升級會失敗並出現 DistributedTransactionPermission。 若要在 ASP.NET 部分信任環境中啟用交易升級,您應該授予 DistributedTransactionPermissionSqlClientPermission 相同的預設信任層級。 您可以設定自己的自定義信任層級和原則檔案以支援此功能,也可以修改默認原則檔案,這些檔案 是Web_hightrust.configWeb_mediumtrust.config

若要修改策略檔案,請將 SecurityClass 元素新增至 DistributedTransactionPermission 元素,置於 SecurityClasses 元素 下的 PolicyLevel 元素下,並在 System.Transactions 的 ASP.NET IPermission 下新增對應的 NamedPermissionSet 元素。 下列組態檔示範這一點。

<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 元素(ASP.NET 設定架構)。

動態編譯

如果您想要在存取時動態編譯的 ASP.NET 應用程式中匯入和使用 System.Transactions,您應該將 System.Transactions 組件的參考放在組態檔中。 具體來說,應該在預設根組態檔的compilation/assemblies區段底下,或特定 Web 應用程式的組態檔中Web.config,新增參考。 下列範例示範此作業。

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

如需詳細資訊,請參閱為編譯的元件新增元素(ASP.NET 設定架構)。

另請參閱