2010-06-01 6 views
2

는 다음 코드를 고려해보십시오트랜잭션 NTFS Process.Start를에 (TXF)는()

try 
{ 
    using(TransactionScope) 
    { 
     Process.Start("SQLInstaller.EXE"); 
     throw new Exception(); 
     Commit(); 
    } 
} 
catch(Exception ex) 
{ 
//Do something here 
} 

은 SQLInstaller.exe에 의한 변경은이 시나리오에서 롤백 할 것인가? 좀 더 구체적으로, Process.Start()를 통해 시작된 외부 프로세스의 변경 사항은 TxF에 의해 처리됩니까?

감사합니다.

+0

'Using (TransactionScope) '란 무엇입니까? –

+0

@Darin : TxF에서 사용중인 실제 Transaction 개체의 가상 코드입니다. http://msdn.microsoft.com/en-us/magazine/cc163388.aspx#S6 – Ian

+1

@Darin : System.Transactions 네임 스페이스의 클래스입니다. TransactionScope가 활성화되어있는 동안 트랜잭션을 지원하는 Microsoft에서 제공하는 객체는 자동으로 "현재"범위 내 트랜잭션에 참여합니다 (필요한 경우 분산 트랜잭션으로 승격됩니다). 일부 타사 구성 요소도이를 지원할 것이며 자신이 선택한 경우 자동으로 개체를 등록 할 수 있습니다. 'TransactionScope'을 처리 할 때'Complete()'메소드가 호출되지 않으면 모든 참여 트랜잭션이 자동으로 롤백됩니다. – Toby

답변

1

시작 프로세스가 자동으로 트랜잭션 작업을 수행하지 않습니다.

이 모델은 암시 적 또는 명시 적인지 여부에 대한 질문입니다. 암시 적 모델은 추론하기가 극히 어렵 기 때문에 특별히 명시 모델을 선택했습니다. 예를 들어, 생성 된 프로세스가 중단되어 트랜잭션을 파이프하지 않는 RPC 호출을 만든 경우 다음과 같은 상황을 고려하십시오. RPC 클라이언트와 서버가 세계를 일관되게 볼 수 있습니까?

짧은 대답 : 아니오.

0

다름. 외부 프로세스는 거래 범위를 전혀 알지 못합니다. 당신이 외부 프로세스의 코더이고 트랜잭션 핸들을 전달할 방법이 있다면, 물론이 경우에는 거의 없습니다.

0

모든 것은 파일 핸들을 얻는 방법에 따라 달라집니다. File.OpenWrite 또는 표준 .NET 파일 조작 방법 중 하나를 사용하여 파일을 열면 해당 액세스가 트랜잭션 적이 아닐 수 있습니다. CreateFileTransacted은 핸들을 열려고 할 때마다 사용해야합니다.

관련 문제