3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Configurazione della transazione
Prima di andare a scrivere un po' di codice, è dunque necessario abilitare il Distributed Transaction Coordinator sulla propria macchina di sviluppo, e, nel caso occorra, sul server remoto, di test o produzione che sia.
In Windows vista è necessario eseguire dal prompt il comando dcomcnfg ed espandere la voce posta sotto Component Services -> Computers -> MyComputer -> Distribuited Transaction Coordinator. A questo punto è sufficiente visualizzare le proprietà ed impostare la configurazione come mostrato nelle immagini successive:


La stessa configurazione va replicata in un'eventuale macchina remota dove, ad esempio, potremmo avere il database basato su SQL Server.
L'implementazione pratica
Dopo aver capito come funziona la configurazione, non ci resta che vedere come utilizzare il tutto in una vera applicazione. Cominciamo dal descrivere le operazioni che andremo ad effettuare per testare la transazione:
- inizio transazione;
- creazione di un file non transazionale;
- creazione di un file in un contesto transazione;
- commit;
- rollback;
Per prima cosa creiamo due variabili private di tipo FileInfo, al cui interno andremo a scrivere le nostre informazioni.
private static FileInfo myTransactedFile = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), @"FileStore\TransactedFile.txt"));
private static FileInfo myNonTransactedFile = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(), @"FileStore\Non-TransactedFile.txt"));Per impostare una transazione ci basta utilizzare il TransactionScope, mettendo al suo interno tutte le operazione che intendiamo gestire a livello transazionale:
using (TransactionScope ts = new TransactionScope())
{
}Lo statement using è importante in quanto al Dispose, se non viene invocato il metodo Complete, verrà effettuato il rollback automatico della transazione.
La creazione di un file senza sfruttare TxF è cosa piuttosto semplice, come mostrato dallo snippet seguente:
using (StreamWriter myFile = new StreamWriter(File.Open(myNonTransactedFile.FullName, FileMode.Create)))
{
myFile.Write("File in nessun contesto transazionele");
}Anche se si intende effettuare la creazione di un file in un contesto transazionale la cosa non è poi molto differente:
using (StreamWriter myFile =
new StreamWriter(TransactedFile.Open(
myTransactedFile.FullName,
FileMode.Create,
FileAccess.Write,
FileShare.None)))
{
myFile.Write("File in un contesto transazionale.");
}Si può notare quanto sia semplice utilizzare TxF nelle nostre applicazioni e che l'unica differenza tra questi due blocchi di codice è il metodo TransactedFile.Open(), che ci restituisce un FileStream.
Se, in più, si vuole aggiungere un'operazione su database, il codice si può tradurre in una cosa del genere:
using (TransactionScope ts = new TransactionScope())
{
//Creo un file in nessuna transazione
using (StreamWriter myFile = new StreamWriter(File.Open(myNonTransactedFile.FullName, FileMode.Create)))
{
myFile.Write("File in nessun contesto transazionele");
}
using (StreamWriter myFile =
new StreamWriter(TransactedFile.Open(
myTransactedFile.FullName,
FileMode.Create,
FileAccess.Write,
FileShare.None)))
{
myFile.Write("I am a transacted file");
}
using (SqlConnection conn = new SqlConnection("Data Source=IMPERSERVER;Initial Catalog=ASPItalia.Test;User Id=sa;Password=;"))
{
using (SqlCommand cmd = new SqlCommand("INSERT INTO TestTable (Description) VALUES ('Prova')", conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
ts.Complete();
}A dimostrazione della sua scalabilità, quest'ultimo blocco di codice è stato eseguito creando due file sulla macchina Windows Server 2008, mentre la query SQL è stata eseguita su una macchina Windows Server 2003 con SQL Server 2005, in una rete con il DTC abilitato.
3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
