2011-11-08 1 views
2

우리는 NHibernate를 사용하여 트랜잭션을 초기화하고 데이터베이스 X의 데이터를 수정하는 .Net 어플리케이션을 가지고 있습니다.이 트랜잭션 중에 우리는 WebService (.Net도)에 대한 호출을 발행하고 데이터베이스 X를 수정하고 다른 데이터베이스를 수정할 수도 있습니다.리소스 관리자를 구현하지 않고도 분산 트랜잭션에서 동일한 데이터베이스를 사용하는 두 개의 응용 프로그램을 가질 수 있습니까?

webservice 용 리소스 관리자를 작성하지 않고 두 응용 프로그램간에이 트랜잭션을 공유 할 수있는 방법이 있습니까? (내가 보는 유일한 방법)

트랜잭션을 시작하는 응용 프로그램은 WebService가 시작하는 데이터베이스 트랜잭션을 인식하고 제어 할 수 있습니까?

답변

1

WCF를 사용하는 경우 다소 간단합니다. 당신이해야 할 일은 계약을 통해 트랜잭션을 통과시키고 자하는 메소드에 TransactionFlowAttribute을 놓는 것입니다.

그런 다음 데이터베이스 호출 클라이언트에서 웹 서비스를 호출 주위에 TransactionScope 인스턴스를 만들 것이고, 트랜잭션은 데이터베이스에 전화 및 웹 서비스 사이에서 조정됩니다.

IIRC를 사용하려면 트랜잭션을 조정하기 위해 Distributed Transaction Controller 서비스를 실행해야합니다.

이 아니고 WCF를 사용하는 인 경우에는 리소스 관리자를 만들어야합니다. 가장 좋은 방법은 특정 트랜잭션에서 을 관리하려고하고 트랜잭션에 참여하는 개별 리소스의 응답 상태에 따라 compensating transactions을 사용하여 트랜잭션을 커밋/롤백하는 두 리소스에 대한 리소스 관리자를 갖는 것입니다.

+0

불행히도 우리는 여전히 소비자 측에서 .Net 프레임 워크 버전 2.X를 사용하고 웹 서비스를 업그레이드하면 우리가 사용하는 도구의 새 버전에 대한 라이센스를 구입할 것이기 때문에 WCF를 사용하지 않습니다. 정확하게 바람직하지는 않다. ;) 보상 거래에 대해 살펴 보겠습니다. 조언 감사합니다. – ygormutti

관련 문제