Operazioni di Amministrazione istration COM+ all'interno delle transazioni

Il database di registrazione COM+ (RegDB) è un gestore di risorse transazioni che può partecipare alle transazioni COM+. Ciò consente di eseguire operazioni di amministrazione all'interno di una transazione e di eseguire il commit o l'interruzione di tutte le modifiche di configurazione come operazione atomica, anche in più computer. In alcune circostanze, può essere molto utile eseguire questa operazione, anche se esiste un comportamento di isolamento e blocco da tenere in considerazione e l'esecuzione di attività di amministrazione all'interno delle transazioni comporta lievi modifiche al modello di programmazione di amministrazione normale.

Vantaggi dell'esecuzione di operazioni di Amministrazione istration all'interno delle transazioni

  • **Coerenza dei dati:**le operazioni di Amministrazione istration eseguite all'interno di una transazione vengono sottoposte a commit o interrotte nel suo complesso, anche se sono presenti alcune risorse del catalogo COM+ non transazionali per le quali questo potrebbe non essere il caso. Vedere le risorse del catalogo COM+ non transazionali di seguito.
  • **Distribuzione coerente tra più computer: **Se si distribuiscono applicazioni COM+ in più server, è possibile garantire che tutti i server rimangano con configurazioni identiche.
  • **Ridimensionamento e prestazioni:**Quando si eseguono più operazioni all'interno di una transazione, tutte le scritture in RegDB vengono eseguite contemporaneamente. Le scritture persistenti in RegDB sono un'operazione relativamente costosa; se si effettuano molte operazioni di scrittura in RegDB, è possibile ottenere un notevole vantaggio dalle prestazioni, invece di ogni volta che si chiama SaveChanges.

Comportamento di isolamento di RegDB

Per garantire la coerenza dei dati e le transazioni serializzabili appropriate, RegDB applica un particolare comportamento di blocco e isolamento quando le operazioni di amministrazione vengono eseguite all'interno delle transazioni.

Ogni volta che un componente che esegue operazioni all'interno di una transazione chiama qualsiasi metodo che causerà una scrittura nel catalogo COM+, ad esempio SaveChanges, InstallApplication o InstallComponent, viene eseguito un blocco writer sul codice del server di catalogo COM+ che impedisce a qualsiasi altro writer di venire in arrivo fino a quando la transazione corrente non esegue il commit o l'interruzione della transazione corrente. Ovvero, i writer possono venire in uso solo se hanno l'affinità di transazione corretta e partecipano alla transazione corrente.

I lettori non sono bloccati. Tuttavia, i dati visualizzati dai lettori non riflettono le modifiche provvisorie apportate all'interno della transazione fino a quando tale transazione non esegue effettivamente il commit. Tutti i componenti che partecipano a tale transazione vedono gli stati dei dati provvisori quando leggono i dati, ma tutti i componenti esterni alla transazione visualizzano tali modifiche solo dopo il completamento della transazione.

Comportamento saveChanges

Per ottenere il comportamento di isolamento descritto in precedenza, RegDB fornisce in modo efficace una cache su cui operano i componenti all'interno della transazione. In questo modo viene modificato il comportamento del metodo SaveChanges.

In genere, senza la presenza di una transazione, le modifiche in sospeso vengono scritte nel catalogo quando si chiama SaveChanges e SaveChanges non restituisce finché non vengono completate tutte le scritture. Ciò garantisce che se una chiamata a SaveChanges restituisce correttamente, è possibile chiamare StartApplication e attiverà l'applicazione con dati aggiornati.

Tuttavia, all'interno di una transazione, SaveChanges influisce solo sulla cache, non sul RegDB stesso e SaveChanges restituisce immediatamente se tutte le modifiche sono state sottoposte a commit transazionale in RegDB. Non esiste alcuna garanzia che StartApplication usi dati aggiornati successivi alla restituzione di SaveChanges . Se è necessario chiamare StartApplication in questo contesto, è consigliabile attendere un certo periodo di tempo prima di farlo.

Periodo di timeout delle transazioni

Se si eseguono numerose operazioni di amministrazione all'interno di una transazione, potrebbe trattarsi di una transazione a esecuzione prolungata. In questo caso, il valore di timeout della transazione può essere un problema. Questo valore viene determinato dal valore di timeout della transazione impostato per il componente che avvia la transazione o dall'impostazione di timeout a livello di computer per il computer in cui è in esecuzione il componente. Se si eseguono numerose operazioni all'interno di una transazione, è consigliabile impostare il periodo di timeout della transazione appropriato su un valore sufficientemente lungo e, se necessario, per ripristinare l'impostazione originale al termine.

Risorse del catalogo COM+ non transazionali

Il Registro di sistema, il file system e Windows Installer (MSI) sono risorse del catalogo COM+ che non sono transazionali.

Nota

Se si verifica un errore che interrompe una transazione, è possibile che non venga eseguito il rollback delle modifiche apportate a queste risorse.

 

Se si verifica un errore durante l'installazione di un'applicazione COM+ esistente da un file di .msi, l'applicazione non viene visualizzata nello snap-in Servizi componenti, ma potrebbe apparire nei programmi di aggiunta/rimozione, nel qual caso è necessario rimuoverla manualmente.

Ripristino in caso di blocchi di sistema

Se un componente che esegue operazioni di amministrazione all'interno di una transazione dovesse bloccarsi mentre contiene un blocco writer nel codice del server di catalogo, impedirebbe a tutti gli altri utenti di apportare modifiche al catalogo. In questo caso, è possibile cancellare il blocco sul catalogo arrestando e riavviando l'applicazione di sistema.

Scripting con un oggetto TransactionContext

Un modo semplice per eseguire operazioni di amministrazione all'interno delle transazioni consiste nell'usare un oggetto TransactionContext per controllare la transazione. Ad esempio, lo script visual Basic seguente illustra come aggiungere in modo transazionale due nuove applicazioni in modo che entrambe le applicazioni o nessuna delle due applicazioni venga creata:

Dim txctx
Dim cat
Dim apps
Dim app1
Dim app2
  
WScript.Echo "Starting"
Set txctx = CreateObject("TxCtx.TransactionContext")
Set cat = txctx.CreateInstance("COMAdmin.COMAdminCatalog")
Set apps = cat.GetCollection("Applications")
Set app1 = apps.Add
app1.Value("Name") = "Test App #1"
apps.SaveChanges
Set app2 = apps.Add
app2.Value("Name") = "Test App #2"
apps.SaveChanges
  
WScript.Echo "Ending"
txctx.Commit

Gestione degli errori di Amministrazione istration COM+

Esempio introduttivo relativo all'uso del catalogo di Amministrazione istration COM+

Panoramica degli oggetti COM Amministrazione

Recupero di raccolte nel catalogo COM+

Impostazione delle proprietà e salvataggio delle modifiche nel catalogo COM+