COM+ Administrationsåtgärder inom transaktioner
COM+-registreringsdatabasen (RegDB) är en transaktionshanterad resurshanterare som kan delta i COM+-transaktioner. På så sätt kan du utföra administrationsåtgärder inom en transaktion och få alla konfigurationsändringar bekräftade eller avbrutna som en atomisk åtgärd, även på flera datorer. I vissa fall kan det vara mycket fördelaktigt att göra detta, även om det finns isolerings- och blockeringsbeteende som du bör ta hänsyn till, och att utföra administrationsuppgifter inom transaktioner innebär små ändringar i den normala programmeringsmodellen för administration.
Fördelar med att utföra administrationsåtgärder inom transaktioner
- **Konsekvens för data– **Administrationsåtgärder som utförs inom en transaktion utförs eller avbryts som helhet, även om det finns vissa icke-transaktionsbaserade COM+-katalogresurser som detta kanske inte är fallet för. (Se Icke-transaktionella COM+-katalogresurser nedan.)
- **Konsekvent distribution över flera datorer– **Om du distribuerar COM+-program över flera servrar kan du garantera att alla servrar har identiska konfigurationer kvar.
- **Skalning och prestanda– **När du utför flera åtgärder i en transaktion utförs alla skrivningar till RegDB samtidigt. Beständiga skrivningar till RegDB är en relativt dyr åtgärd. Om du gör många skrivningar till RegDB kan du få en stor prestandafördel genom att göra dem alla på en gång i stället för varje gång du anropar SaveChanges.
Isoleringsbeteende för RegDB
För att säkerställa korrekt datakonsekvens och serialiserbara transaktioner framtvingar RegDB särskilt blockerings- och isoleringsbeteende när administrationsåtgärder utförs inom transaktioner.
När en komponent som arbetar inom en transaktion anropar en metod som orsakar en skrivning till COM+-katalogen, till exempel SaveChanges, InstallApplicationeller InstallComponent, tas ett skrivlås på COM+ katalogserverkod som blockerar andra skrivare från att komma in tills den aktuella transaktionen checkar in eller avbryter. Det vill: författare kan bara komma in om de har rätt transaktionstillhörighet och deltar i den aktuella transaktionen.
Läsare blockeras inte. De data som läsarna ser återspeglar dock inte några interimsändringar som gjorts i transaktionen förrän transaktionen faktiskt checkas in. Alla komponenter som deltar i transaktionen ser interimsdatatillstånd när de läser data, men alla komponenter utanför transaktionen ser dessa ändringar först när transaktionen har slutförts.
SaveChanges-beteende
För att uppnå det isoleringsbeteende som beskrivs ovan tillhandahåller RegDB effektivt en cache som hanteras av komponenter i transaktionen. Detta ändrar beteendet för metoden SaveChanges.
Normalt skrivs eventuella väntande ändringar till katalogen när du anropar SaveChangesoch SaveChanges inte returneras förrän alla skrivningar har slutförts. Detta garanterar att om ett anrop till SaveChanges returneras kan du anropa StartApplication- och det aktiverar programmet med nya data.
Men i en transaktion påverkar SaveChanges endast cacheminnet, inte själva RegDB, och SaveChanges returnerar omedelbart om alla ändringar har checkats in transaktionsmässigt till RegDB. Det finns ingen garanti för att StartApplication använder nya data efter att SaveChanges returneras. Om du behöver anropa StartApplication i det här sammanhanget bör du vänta en stund innan du gör det.
Transaktion Time-Out period
Om du utför många administrationsåtgärder inom en transaktion kan det vara en tidskrävande transaktion. I det här fallet kan tidsgränsvärdet för transaktionen vara ett problem. Detta bestäms antingen av tidsgränsvärdet för transaktionen för komponenten som initierar transaktionen eller av timeout-inställningen för hela datorn där komponenten körs. Om du utför flera åtgärder inom en transaktion rekommenderar vi att du anger lämplig tidsgräns för transaktionen till ett tillräckligt långt värde och, om det behövs, återställa den ursprungliga inställningen när du är klar.
Icke-transaktionella COM+-katalogresurser
Registret, filsystemet och Windows Installer (MSI) är COM+-katalogresurser som inte är transaktionsbaserade.
Not
Om det finns ett fel som avbryter en transaktion kan det hända att ändringar i dessa resurser inte återställs.
Om det uppstår ett fel när du installerar ett befintligt COM+-program från en .msi fil visas inte programmet i snapin-modulen Komponenttjänster, men det kan visas i Lägg till/ta bort program, i vilket fall du behöver ta bort det manuellt.
Återställning i händelse av systemlåsningar
Om en komponent som utför administrationsåtgärder inom en transaktion skulle låsas medan den har ett skrivlås på katalogserverkoden skulle det hindra alla andra från att göra ändringar i katalogen. Om detta skulle inträffa kan du rensa låset på katalogen genom att stänga av och starta om systemprogrammet.
Skript med ett TransactionContext-objekt
Ett enkelt sätt att utföra administrationsåtgärder inom transaktioner är att använda ett TransactionContext- objekt för att kontrollera transaktionen. Följande Visual Basic-skript visar till exempel hur du transaktionsmässigt lägger till två nya program så att båda programmen eller inget av programmen skapas:
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
Relaterade ämnen