Condividi tramite


Utilizzo delle transazioni

Gli autori di applicazioni possono apportare modifiche minime al codice sorgente per aggiungere operazioni di file e di registro transazionali utilizzando il Kernel Transaction Manager (KTM). In genere, ciò comporta la creazione di una transazione e il passaggio dell'handle ad altre funzioni fornite da risorse transazionali, ad esempio NTFS transazionale e il Registro transazionale.

KTM fornisce meccanismi che consentono all'applicazione di partecipare alle transazioni e di scrivere il proprio gestore delle risorse transazionali. Esistono funzioni che consentono di creare, gestire e usare quattro classi di oggetti kernel: transazioni, gestori di transazioni, gestori di risorse e arruolamenti. Se si usano semplicemente transazioni, è sufficiente usare gli oggetti transazione e usare queste funzioni:

Non presupporre mai che una transazione sia attiva. È possibile eseguire il rollback delle transazioni per molti motivi e in qualsiasi momento.

Windows espone un'interfaccia basata sui handle alle risorse di sistema. Per utilizzare un oggetto del sistema operativo, l'applicazione richiede innanzitutto un handle all'oggetto e quindi usa questo handle nelle chiamate di funzione successive per accedere o modificare l'oggetto. Un handle può in genere essere aperto in modalità diverse; la modalità specificata influisce sulla semantica delle chiamate di funzione successive. Ad esempio, un handle di file aperto da una chiamata a CreateFile con il flag dwDesiredAccess impostato su GENERIC_READ non può essere utilizzato nelle chiamate che modificano il file.

È possibile coordinarsi con risorse in modalità utente di Coordinatore di Transazioni Distribuito, ad esempio SQL o MSMQ, e con risorse in modalità nucleo che usano KTM. Creare prima di tutto una transazione DTC o un oggetto System.Transactions, quindi chiamare l'oggetto IKernelTransaction da cui è possibile ottenere l'handle KTM. L'oggetto IKernelTransaction crea una transazione KTM subordinata alla transazione DTC. Con questo handle è possibile creare gli oggetti transazionati, ma segnalare il risultato della transazione usando DTC o System.Transactions.