共用方式為


在 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 信任層級和原則檔案 (英文)。 初次安裝 Windows SDK 時,沒有任何預設 ASP.NET 原則檔案會與 DistributedTransactionPermission 相關聯。 因此,當 ASP.NET 應用程式中的交易規模擴大至需由 MSDTC 管理時,在要求 SecurityException 時,擴大規模會失敗,並傳回 DistributedTransactionPermission。 若要在 ASP.NET 部分信任環境中啟用交易擴大規模,您應該在同一個預設信任層級中授予 DistributedTransactionPermission 權限 (與在 SqlClientPermission 中所授予的權限一樣)。 您可以選擇設定自訂的信任層級與原則檔來支援這項作業,或者也可以修改預設的原則檔,亦即 Web_hightrust.configWeb_mediumtrust.config

若要修改原則檔,請將 DistributedTransactionPermissionSecurityClass 元素加入 PolicyLevel 元素底下的 SecurityClasses 元素中,並將對應的 IPermission 元素加入 System.Transactions 的 ASP.NET 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 組件的參考。 具體來說,您應該將參考新增預設根 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 項目 (ASP.NET 設定結構描述)

另請參閱