ASP.NET에서 System.Transactions 사용

이 항목에서는 ASP.NET 응용 프로그램 내부에서 System.Transactions를 성공적으로 사용하는 방법에 대해 설명합니다.

ASP.NET에서 DistributedTransactionPermission 사용

System.Transactions는 부분적으로 신뢰할 수 있는 호출자를 지원하며 AllowPartiallyTrustedCallers 특성(APTCA)으로 표시됩니다. System.Transactions에 대한 신뢰 수준은 System.Transactions 가 노출하는 리소스 형식(예: 시스템 메모리, 공유 프로세스 범위 리소스, 시스템 범위 리소스 및 기타 리소스) 및 해당 리소스에 액세스하는 데 필요한 신뢰 수준을 기반으로 정의됩니다. 부분 신뢰 환경에서 완전 신뢰가 아닌 어셈블리는 DistributedTransactionPermission이 부여되지 않은 경우 애플리케이션 도메인 내에서만 트랜잭션을 사용할 수 있습니다(이 경우 보호되는 리소스는 시스템 메모리뿐임).

MSDTC(Microsoft Distributed Transaction Coordinator)에서 관리하도록 트랜잭션 관리를 에스컬레이션할 때마다DistributedTransactionPermission 이 필요합니다. 이 종류의 시나리오에서는 프로세스 범위 리소스, 특히 MSDTC 로그의 예약된 공간인 전역 리소스를 사용합니다. 이러한 사용 예로 데이터베이스에 대한 웹 프런트 엔드 또는 제공하는 서비스의 일부로 데이터베이스를 사용하는 애플리케이션이 있습니다.

ASP.NET에는 자체 신뢰 수준이 있으며 정책 파일을 통해 특정 사용 권한 집합을 이러한 신뢰 수준과 연결합니다. 자세한 내용은 ASP.NET 신뢰 수준 및 정책 파일을 참조하세요. Windows SDK를 처음 설치할 때는 DistributedTransactionPermission과 연결된 기본 ASP.NET정책 파일이 없습니다. 따라서 MSDTC에서 관리하도록 ASP.NET 응용 프로그램의 트랜잭션을 에스컬레이션하는 경우 SecurityException을 요청할 때 DistributedTransactionPermission이 발생하며 에스컬레이션이 실패합니다. ASP.NET 부분 신뢰 환경에서 트랜잭션 에스컬레이션을 사용하려면 DistributedTransactionPermission과 동일한 기본 신뢰 수준에서 SqlClientPermission을 부여해야 합니다. 이를 지원하도록 사용자 지정 신뢰 수준과 정책 파일을 구성하거나 Web_hightrust.configWeb_mediumtrust.config인 기본 정책 파일을 수정할 수 있습니다.

정책 파일을 수정하려면 DistributedTransactionPermission에 대한 SecurityClass 요소를 SecurityClasses 요소의 PolicyLevel 요소 아래에 추가하고 해당 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 구성 파일이나 특정 웹 애플리케이션 구성 파일의 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 설정 스키마)를 참조하세요.

참고 항목