이 항목에서는 노출되는 리소스 System.Transactions 유형에 대한 액세스를 제한하는 방법에 대해 설명합니다.
에 대한 신뢰의 세 가지 주요 수준이 있습니다 System.Transactions. 신뢰 수준은 노출되는 System.Transactions 리소스 유형 및 해당 리소스에 액세스하는 데 필요한 신뢰 수준에 따라 정의됩니다. 액세스를 제공하는 리소스 System.Transactions 는 시스템 메모리, 공유 프로세스 전체 리소스 및 시스템 전체 리소스입니다. 수준은 다음과 같습니다.
단일 애플리케이션 도메인 내에서 트랜잭션을 사용하는 애플리케이션의 경우 APTCA(AllowPartiallyTrustedCallers)입니다.
분산 트랜잭션을 사용하는 애플리케이션에 대한 DTP(DistributedTransactionPermission)입니다.
지속성 리소스, 구성 관리 애플리케이션 및 레거시 상호 운용성 애플리케이션에 대한 완전 신뢰.
비고
가장된 컨텍스트를 사용하여 인리스트먼트 인터페이스를 호출해서는 안 됩니다.
신뢰 수준
APTCA (부분 신뢰)
어셈블리 System.Transactions는 APTCA 특성으로 표시되어 있기 때문에 AllowPartiallyTrustedCallers 부분적으로 신뢰할 수 있는 코드에 의해 호출될 수 있습니다. 이 특성은 기본적으로 각 형식의 공개적으로 액세스할 수 있는 각 메서드에 자동으로 배치되는 LinkDemand 권한 집합에 대한 암시적 값을 제거합니다. 그러나 일부 형식 및 멤버에는 여전히 더 강력한 권한이 필요합니다.
APTCA 특성을 사용하면 애플리케이션이 단일 애플리케이션 도메인 내에서 부분 신뢰의 트랜잭션을 사용할 수 있습니다. 이렇게 하면 오류 처리에 사용할 수 있는 에스컬레이션되지 않은 트랜잭션 및 일시적 인리스트먼트를 사용할 수 있습니다. 이 중 한 가지 예는 트랜잭션된 해시 테이블과 이를 사용하는 애플리케이션입니다. 단일 트랜잭션에서 해시 테이블에 데이터를 추가하고 제거할 수 있습니다. 트랜잭션이 나중에 롤백되면 해당 트랜잭션의 해시 테이블에 대한 모든 변경 내용을 취소할 수 있습니다.
DistributedTransactionPermission(DTP)
MSDTC에서 System.Transactions 트랜잭션이 관리되도록 에스컬레이션될 때, System.Transactions는 DistributedTransactionPermission에 분산 트랜잭션을 생성하도록 요구합니다. 즉, 트랜잭션을 에스컬레이션하는 코드(예: 직렬화 또는 추가 지속적인 등록을 통해)에 DTP 권한을 부여해야 합니다. 원래 트랜잭션을 만든 코드가 System.Transactions 반드시 이 권한을 보유할 필요는 없습니다.
FullTrust 링크 요구 사항
이 권한 수준은 지속성 리소스에 쓰는 애플리케이션을 제한하기 위한 것입니다. 실패 시 애플리케이션은 트랜잭션 관리자와 함께 복구하여 트랜잭션의 최종 결과를 확인할 수 있어야 영구 데이터를 업데이트할 수 있습니다. 이 유형의 애플리케이션을 지속성 원본 관리자라고 합니다. 이러한 유형의 애플리케이션의 전형적인 예는 SQL입니다.
복구를 사용하도록 설정하기 위해 이 유형의 애플리케이션은 시스템 리소스를 영구적으로 사용할 수 있습니다. 이는 복구 가능한 트랜잭션 관리자가 트랜잭션에 참여하는 모든 지속성 리소스 관리자가 결과를 수신했는지 확인할 때까지 커밋된 트랜잭션을 기억해야 하기 때문입니다. 따라서 이 유형의 애플리케이션에는 완전 신뢰가 필요하며 해당 신뢰 수준이 부여되지 않은 한 실행해서는 안 됩니다.
지속적인 인리스트먼트 및 복구에 대한 자세한 내용은 트랜잭션에서 리소스를 참가자로 참여시키는 항목과 복구 수행 항목을 참조하세요.
COM+에서 레거시 interop 작업을 수행하는 애플리케이션도 완전 신뢰가 필요합니다.
다음은 FullTrust 선언적 보안 특성으로 데코레이팅되므로 부분적으로 신뢰할 수 있는 코드에서 호출할 수 없는 형식 및 멤버 목록입니다.
PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")
위의 형식이나 메서드를 사용하려면 직접 호출자만 FullTrust 권한 집합을 소유해야 합니다.
.NET