transactionscope 예제

By August 2, 2019Uncategorized

트랜잭션을 롤백하려면 트랜잭션 범위 내에서 Complete 메서드를 호출해서는 안 됩니다. 예를 들어 범위 내에서 예외를 throw할 수 있습니다. 참여하는 트랜잭션이 롤백됩니다. 데이터베이스 연결(SqlConnection)과 직접 연결된 트랜잭션을 연결 트랜잭션이라고 합니다. SqlTransaction(IDbTransaction)은 연결 트랜잭션의 예입니다. .NET 프레임워크 1.0/1.1에서 SqlTransaction을 사용합니다. 이 예제에서는 필수를 사용 하 고 새 범위 (scope1)를 만드는 어떤 주변 트랜잭션 없이 코드 블록을 보여 드립니다. scope1은 새 트랜잭션(트랜잭션 A)을 만들고 트랜잭션 A를 앰비언트 트랜잭션으로 만드는 루트 범위입니다. 그런 다음 Scope1은 서로 다른 트랜잭션ScopeOption 값을 가진 세 개의 개체를 더 만듭니다. 예를 들어 scope2는 필수로 만들어지며 앰비언트 트랜잭션이 있으므로 scope1에서 만든 첫 번째 트랜잭션에 조인합니다.

scope3는 새 트랜잭션의 루트 범위이며 scope4에는 앰비언트 트랜잭션이 없습니다. suppress는 코드 섹션에서 수행하는 작업을 유지하려는 경우 유용하며 작업이 실패할 경우 앰비언트 트랜잭션을 중단하지 않으려는 경우에 유용합니다. 예를 들어 로깅 또는 감사 작업을 수행하려는 경우 또는 주변 트랜잭션이 커밋또는 중단되는지 여부에 관계없이 구독자에게 이벤트를 게시하려는 경우를 예로 들 수 있습니다. 이 값을 사용하면 다음 예제와 같이 트랜잭션 범위 내에 비트랜잭션 코드 섹션을 사용할 수 있습니다. 다음 예제에서 RootMethod 메서드의 경우와 마찬가지로 자체 범위를 사용하는 메서드 내에서 TransactionScope를 사용하는 메서드를 호출하여 트랜잭션 범위를 중첩할 수 있습니다. SqlTransaction 클래스입니다. 트랜잭션 관련 사항을 명시적으로 언급하지 않고 트랜잭션을 지원해야 하는 코드 블록을 자동으로 식별하는 트랜잭션입니다. 앰비언트 트랜잭션은 데이터베이스에만 연결되지 않고 모든 트랜잭션 인식 공급자를 사용할 수 있습니다.

트랜잭션 범위는 앰비언트 트랜잭션을 구현합니다. 트랜잭션Scope의 사용이 표시되면 메서드로 전송하거나 속성을 설정하는 트랜잭션 관련 내용을 찾을 수 없습니다. 해당 코드가 트랜잭션Scope에 있는 경우 코드 블록이 트랜잭션과 함께 자동으로 연결됩니다. WCF 트랜잭션은 트랜잭션 인식 공급자의 또 다른 예입니다. 누구나 WCF 구현과 같은 트랜잭션 인식 공급자를 작성할 수 있습니다. System.Transactions 인프라는 트랜잭션 클래스를 기반으로 하는 명시적 프로그래밍 모델과 트랜잭션이 자동으로 관리되는 TransactionScope 클래스를 사용하는 암시적 프로그래밍 모델을 모두 제공합니다. 인프라. 두 연결이 서로 다른 두 데이터베이스를 가리키는 경우 MSDTC(Microsoft 분산 트랜잭션 코디네이터)가 사용될지 궁금하다면 대답은 절대적으로 그렇습니다. 트랜잭션은 필요할 때 분산 트랜잭션으로 자동으로 승격되고 MSDTC가 관련됩니다. 트랜잭션 스코프는 MSDTC에 대한 필요성을 제거하지 않습니다.

트랜잭션이 두 개 이상의 데이터베이스에 걸쳐 있는 경우 코드가 실행되는 서버에서 MSDTC가 활성화되어 있는지 확인합니다. 트랜잭션Scope.Complete() 메서드를 호출하지 않으면 트랜잭션이 자동으로 롤백됩니다. 일부 시나리오에 대해 롤백을 명시적으로 호출해야 하는 경우 두 가지 옵션이 있습니다. 코드 블록 트랜잭션을 만듭니다. 이 클래스는 상속할 수 없습니다. 새 루트 범위, 즉 새 트랜잭션을 시작하고 해당 트랜잭션을 자체 범위 내에서 새 앰비언트 트랜잭션이 되도록 합니다. 트랜잭션 범위는 .NET 프레임워크에서 매우 특별하고 중요한 클래스입니다.