다른 사람의 가이드를 인용하자면: 실제 개발 작업에서는 이벤트를 실행한 후 다른 인터페이스를 호출해 데이터를 삽입하는데, 처리 로직에 예외가 있으면 이전에 삽입된 데이터는 정크 데이터가 됩니다. 우리가 원하는 것은 전체 메서드를 트랜잭션으로 정의할 수 있는 것이고, TransactionScope 클래스는 트랜잭션 자체와 상호작용하지 않아도 되는 간단한 메서드를 제공합니다. 코드 블록을 트랜잭션에 참여한 것으로 표시하는 것입니다. TransactionScope 객체는 트랜잭션을 생성하고 트랜잭션 클래스의 Current 속성으로 트랜잭션을 설정합니다.
1. 트랜잭션스코프의 장점 1. 사용이 더 편리하다. TransactionScope는 암시적 트랜잭션을 구현할 수 있어, 트랜잭션을 고려하지 않고 데이터 접근 계층 코드를 작성할 수 있으면서도 비즈니스 계층에서 트랜잭션을 제어할 수 있습니다. 2. 분산 트랜잭션을 구현할 수 있으며, 예를 들어 크로스 데이터베이스나 MSMQ와 같은 방식입니다.
2. 트랜잭션스코프의 단점 1. 비용 성과가 높지 않습니다. 예를 들어, "범위"에서 라이브러리의 트랜잭션만 제어할 수 있습니다. "TransactionScope"를 사용하는 것은 다소 낭비적입니다. 2. 일반적인 상황에서 "TransactionScope"를 사용하는 한 MSDTC 설정, 방화벽 설치, 포트 139 열기 등이 필요합니다. 이 포트는 변경할 수 없습니다
3. 분산 거래를 사용해야 한다면, 신중히 생각해야 합니다 1. 이 작업이 반드시 거래에 포함되어야 하나요? 이 단계가 완료되지 않았거나 실패한다면, 전체 거래를 롤백하는 것이 가치가 있을까요? 우아한 보상이나 내결함 조치가 전혀 없는 건가요? 2. 분산 거래는 몇 포인트를 포함하는가? 실시간 연속이 많아야 하나요? 알림 작업을 통해 일부 포인트를 간소화할 수는 없나요? 3. 분산 트랜잭션을 시작한 후, 트랜잭션과 무관한 작업을 수행했는가? 이 작업이 트랜잭션과 관련 없더라도 말이다. (예: 데이터 읽기, 계산, 사용자의 메시지 반환 기다림, 다른 모듈의 호출 반환 기다림 등) 4. 거래 과정에서 읽기 작업을 포함하지 않았죠? 트랜잭션에 선택 작업을 도입할 때 쉽게 저지르는 실수입니다. 5. 모든 작업이 완료된 후 일부 작업은 실행할 수 있습니다. 이러한 유형의 작업은 명확한 알림 특성을 가지고 있습니다. 알림 운영은 '내가 알림을 주고, 그 알림이 반드시 도착할 것임을 보장한다'고 말합니다; 이 통지서를 받아 처리되도록 해야 하지만, 제가 통보하자마자 바로 처리할 필요는 없습니다. 이 연산은 분명히 다른 작업으로도 수행할 수 있습니다.
4. 분산 트랜잭션을 사용할 때 다음 사항들에 주의하세요 1: 트랜잭션에 참여하는 기계가 분산 트랜잭션 지원을 활성화했는지 확인하세요. 2: 만약 기기에 방화벽이 켜져 있다면, MSDTC 프로세스를 예외로 설정해야 합니다. 3: 트랜잭션에 참여하는 기계는 도메인을 넘을 수 없습니다(만약 도메인이 교차한다면, 마이크로소프트는 현재 정확한 해결책을 가지고 있지 않습니다); 4: 여러 데이터베이스가 있을 때만 분산 트랜잭션을 사용하세요. 같은 데이터베이스라면 SqlTransaction을 사용하는 것이 가장 좋습니다. 1. System.Transactions 참조를 먼저 추가하세요 (Net 어셈블리를 추가해야 합니다)
C# 호출의 코드는 다음과 같습니다:
이 분산 트랜잭션 클래스를 설명하는 블로그 주소는 매우 명확합니다:http://www.cnblogs.com/artech/archive/2010/01/31/1660356.html
2. 웹 서버 및 SQL 서버 환경 구성 설정
제어판 - > 시스템 및 보안 - > 관리 도구 - > 구성 요소 서비스 (이는 WEB과 SQL 서버 모두에 필요합니다)
제어판 - > 시스템 및 보안 - > 관리 도구 - > 서비스
(이는 WEB과 SQL 서버 모두에 필요합니다)
제어판 - > 시스템 및 보안 - > Windows 방화벽
(이는 WEB과 SQL 서버 모두에 필요합니다)
3. MSSQL 구성
서버 연결은 오른쪽 클릭 - > 속성
4. 호스트 구성 (웹 서버만 설정하고, 그렇지 않으면 SQL 서버에서도 설정)
C:\Windows\System32\drivers\etc 노트패드로 열리는 hosts 파일입니다 (SQL 서버 정보는 웹 서버의 Hosts 파일에 설정해야 합니다) (테스트가 실패하면 SQL 서버의 Hosts 파일에 웹 서버 정보를 구성하세요)
|