venerdì 7 dicembre 2007

Gestione delle transazioni con TransactionScope

In .NET 2.0 è stato introdotto il costrutto TransactionScope per una gestione più versatile delle transazioni anche tra diversi database.

TransactionScope colpisce per due principali motivi.
1. Non necessita la creazione (e la gestione) di un oggetto SqlTransaction
2. Permette di racchiudere in un unica transazione più connessioni (anche su diversi database).

Prima di iniziare questo tutorial faccio alcune considerazioni per farlo funzionare senza problemi.
Dovete avere installato e configurato il coordinatore delle transazioni sul computer che esegue il programma e sull'eventuale server di database.

Controllate se il servizio è attivo

c:\>sc query msdtc

SERVICE_NAME: msdtc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0


Se è avviato (STATE : 4 RUNNING) dovete solo passare alla configurazione altrimenti prima dovete avviare il servizio.

Per avviare il servizio manualmente:
c:\> sc start msdtc

Per Impostare il servizio in modo che venga avviato automaticamente all'avvio del computer lanciate in sequenza questi comandi

c:\> sc stop msdtc
c:\> sc config msdtc start= auto (NB: start=auto)
c:\> sc start msdtc

Per configurare MSDTC in modo che possa comunicare via rete potete procedere in due modi
1. Avviate "Servizi Componenti" (Pannello di controllo > Strumenti di amministrazione)
Espandere il nodo "Servizi componenti", poi "Computer" e selezionate "Risorse del computer".
Entrate nelle proprietà e andate alla scheda MSDTC.
Chekkate "Accesso DTC rete"
Chekkate "Consenti in ingresso" e "Consenti in uscita"
Selezionate "Nessuna autenticazione richiesta" (Se non volete autenticazione)

Assicuratevi che l'account di accesso DTC sia "NT AUTHORITY\NetworkService"

Salvate e riavviate il servizio.

In alternativa a questo metodo potete inserire i valori direttamente nel registro.

Copiate questo codice dentro il blocco note e salvate il file con estensione .reg e lanciatelo.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security]
"NetworkDtcAccess"=dword:00000001
"NetworkDtcAccessAdmin"=dword:00000000
"NetworkDtcAccessClients"=dword:00000000
"NetworkDtcAccessTransactions"=dword:00000001
"NetworkDtcAccessTip"=dword:00000000
"XaTransactions"=dword:00000000
"NetworkDtcAccessOutbound"=dword:00000001
"NetworkDtcAccessInbound"=dword:00000001
"DomainControllerState"=dword:00000000
"AccountName"="NT AUTHORITY\\NetworkService"
@=""

Ora che msdtc è avviato e configurato correttamente potete iniziare ad usare TransactionScope e le transazioni distribuite.


TransactionScope