Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Varje resurs som används i en transaktion hanteras av en resurshanterare vars åtgärder samordnas av en transaktionshanterare. Resursansvariga arbetar i samarbete med transaktionshanteraren för att ge programmet en garanti för atomitet och isolering. Microsoft SQL Server, varaktiga meddelandeköer, minnesinterna hash-tabeller är alla exempel på resurshanterare.
En resurshanterare hanterar antingen varaktiga eller flyktiga data. Hållbarheten (eller omvänt volatiliteten) för en resurshanterare syftar på om resurshanteraren stöder felåterställning. Om en resurshanterare stöder felåterställning, bevarar den data till beständig lagring under fas 1 (förberedelse), vilket säkerställer att resurshanteraren kan återregistrera sig i transaktionen vid återställning och utföra de rätta åtgärderna baserat på de meddelanden som tas emot från transaktionshanteraren. I allmänhet hanterar flyktiga resurshanterare flyktiga resurser, till exempel en minnesintern datastruktur (till exempel en transacted-hashtable i minnet) och hållbara resurshanterare hanterar resurser som har ett mer beständigt lagringslager (till exempel en databas vars lagringsplats är disk).
För att en resurs ska kunna delta i en transaktion måste den registrera sig i transaktionen. Klassen Transaction definierar en uppsättning metoder vars namn börjar med Enlist som tillhandahåller den här funktionen. De olika Enlist metoderna motsvarar de olika typer av registreringar som en resurshanterare kan ha. Mer specifikt använder EnlistVolatile du metoderna för flyktiga resurser och EnlistDurable metoden för varaktiga resurser. För enkelhetens skull, efter att ha bestämt om du vill använda EnlistDurable eller EnlistVolatile metoden baserat på resursens hållbarhetsstöd, bör du anmäla din resurs för deltagande i tvåfasengagemang (2PC) genom att implementera IEnlistmentNotification-gränssnittet för din resurshanterare. Mer information om 2PC finns i Incheckning av en transaktion i Single-Phase och flera faser.
Genom att registrera säkerställer resurshanteraren att den får återkopplingar från transaktionshanteraren när transaktionen begås eller avbryts. Det finns en instans av IEnlistmentNotification per registrering. Vanligtvis finns det en registrering per transaktion, men en resurshanterare kan välja att registrera flera gånger i samma transaktion.
Efter enlistning svarar resurshanteraren på transaktionens begäranden. En beständig resurshanterare lagrar tillräckligt med information så att den antingen kan ångra eller göra om transaktionens arbete med resurser som hanteras. Det finns många sätt att göra detta; att behålla versioner av data eller att hålla en logg över ändringarna är två vanliga tekniker.
När applikationen genomför transaktionen initierar transaktionshanteraren tvåfas-commit-protokollet. Transaktionshanteraren frågar först varje registrerad resurshanterare om den är beredd att genomföra transaktionen. Resurshanteraren måste förbereda sig för att begå — den förbereder sig för att antingen begå eller avbryta transaktionen.
Under förberedelsefasen registrerar den hållbara resurshanteraren gamla och nya data i stabil lagring så att resurshanteraren kan återställa dem även om systemet misslyckas. Om resurshanteraren kan förbereda sig informerar den transaktionshanteraren om huruvida transaktionen ska genomföras eller avbrytas. Om någon resurshanterare rapporterar ett misslyckande med att förbereda sig, skickar transaktionshanteraren ett återställningskommando till varje resurshanterare och meddelar att transaktionens utförande har misslyckats.
När resurshanteraren har förberetts måste den vänta tills den får ett bekräftelse- eller avbrutande återanrop från transaktionshanteraren i fas 2. Normalt slutförs hela förberedelse- och incheckningsprotokollet på en bråkdel av en sekund. Om det uppstår system- eller kommunikationsfel kanske inchecknings- eller avbrytningsmeddelandet inte kommer fram på flera minuter eller timmar. Under den här perioden är resurshanteraren osäker på resultatet av transaktionen. Det vet inte om transaktionen genomförts eller avbrutits. Även om resurshanteraren är osäker på en transaktion, behåller den datan ändrad genom att hålla transaktionen låst, vilket isolerar dessa ändringar från andra transaktioner.
När en resurshanterare misslyckas avbryts alla dess registrerade transaktioner förutom de som har committerats eller förberetts före felet. När en beständig resurshanterare startas om rekonstrueras det genomförda tillståndet för de resurser som hanteras genom att hämta den förberedande information som skrivits i förberedelsefasen och därefter genomför eller avbryter dessa transaktioner.
Sammanfattningsvis kombineras tvåfas-åtagandeprotokollet och resurshanterarna för att göra transaktionerna atomära och hållbara.
Klassen Transaction innehåller också metoden EnlistPromotableSinglePhase för att registrera en PSPE (Promotable Single Phase Enlistment). På så sätt kan en beständig resurshanterare (RM) vara värd för och "äga" en transaktion som senare kan eskaleras till att hanteras av MSDTC om det behövs. Mer information om detta finns i Optimering med hjälp av enfasbekräftelse och meddelande om uppflyttningsbar enfas.
I det här avsnittet
Stegen som vanligtvis följs av en resurshanterare beskrivs i följande avsnitt.
Registrera resurser som deltagare i en transaktion
Beskriver hur en beständig eller flyktig resurs kan registrera sig i en transaktion.
Genomföra en transaktion i Single-Phase och flera faser
Beskriver hur en resurshanterare svarar på incheckningsmeddelandet och förbereder incheckningen.
Beskriver hur en hållbar resurshanterare återhämtar sig från fel.
Säkerhetsförtroendenivåer för åtkomst till resurser
Beskriver hur de tre förtroendenivåerna för System.Transactions begränsar åtkomsten till de typer av resurser som System.Transactions exponeras.
Optimering med hjälp av Single Phase Commit och Promotable Single Phase Notification
Beskriver optimeringsmetoder som är tillgängliga för implementeringar av resurshanterare.