2009-11-19 4 views
3

Subsonic에서 트랜잭션 구성 (다음 참조)을 사용하려면 MSDTC가 Windows 컴퓨터에서 실행되어야합니다. 권리?Windows의 MSDTC 이해

 using (TransactionScope ts = new TransactionScope()) 
     { 
      using (SharedDbConnectionScope sharedConnectionScope = new SharedDbConnectionScope()) 
      { 
       // update table 1 
       // update table 2 

       // ts.commit here 

      } 
     } 
  1. 은 MS-DTC Windows 시스템 (XP, 비스타, 윈도우 7, 서버 등)에 기본 서비스인가?
  2. 활성화되어 있지 않은 경우 응용 프로그램 설치 과정에서 어떻게 활성화 할 수 있습니까?

답변

7

MSDTC에는 Windows가 설치되어 있어야합니다. 그것은이 다음 명령으로 설치 될 수 있지 않은 경우 :

msdtc -install 

당신은 SC.exe를 사용하여 MSDTC 서비스를 구성 할 수 있습니다. 위를 수행하려면 관리자 권한이 필요합니다

sc config msdtc start= auto 
sc start msdtc 

참고 : 자동으로 시작하고 서비스를 시작하도록 서비스를 설정합니다.

0

합니다. 그러나 SQL Server 2005 (및 SQL Server 2008)는 분산 트랜잭션이 필요하지 않음을 알기에 충분히 똑똑합니다. 나는 그것이 단지 로컬 DB에 적용되는지 또는 심지어 제거 서버에있는 경우에도 당신이 거래 하나의 DB를 포함하는 경우 사실인지 모르겠다. http://davidhayden.com/blog/dave/archive/2005/12/09/2615.aspx

한 가지 힌트를 사용하면 배치 쿼리를 사용하여 TransactionScope를 피할 수 있습니다.

http://subsonicproject.com/docs/BatchQuery

BatchQuery, QueueForTransaction 및 ExecuteTransaction (프로 바이더의 구현에 따라 다릅니다 물론)을하여 TransactionScope를 사용하지만 (이 경우 SqlTransaction) 기본 데이터 공급자의 거래 mechanismn을 선택하지 않습니다 요구하지 않을 것이다 MSTDC.

1

내가 사용

private bool InitMsdtc() 
{ 
    System.ServiceProcess.ServiceController control = new System.ServiceProcess.ServiceController("MSDTC"); 
    if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) 
     control.Start(); 
    else if (control.Status == System.ServiceProcess.ServiceControllerStatus.Paused) 
     control.Continue(); 
    return true; 
}