Een Resource Manager implementeren
Elke resource die in een transactie wordt gebruikt, wordt beheerd door een resourcemanager, waarvan de acties worden gecoördineerd door een transactiebeheerder. Resourcemanagers werken samen met de transactiemanager om de toepassing een garantie te bieden voor atomiciteit en isolatie. Microsoft SQL Server, duurzame berichtenwachtrijen, hashtabellen in het geheugen zijn allemaal voorbeelden van resourcemanagers.
Een Resource Manager beheert duurzame of vluchtige gegevens. De duurzaamheid (of omgekeerd de volatiliteit) van een resourcemanager verwijst naar of de resourcemanager foutenherstel ondersteunt. Als een resourcemanager herstel van fouten ondersteunt, worden er gegevens bewaard in duurzame opslag tijdens fase1 (voorbereiding), zodat als de resourcemanager uitvalt, de transactie opnieuw kan worden opgenomen bij herstel en de juiste acties kunnen worden uitgevoerd op basis van de meldingen die zijn ontvangen van de transactiebeheerder. Over het algemeen beheren vluchtige resourcebeheerders vluchtige resources, zoals een gegevensstructuur in het geheugen (bijvoorbeeld een transacted-hashtable in het geheugen), en duurzame resourcemanagers beheren resources die een persistenter back-uparchief hebben (bijvoorbeeld een database waarvan de back-upopslag een schijf is).
Als u wilt dat een resource deelneemt aan een transactie, moet deze in de transactie worden opgenomen. De Transaction klasse definieert een set methoden waarvan de namen beginnen met Enlist die deze functionaliteit bieden. De verschillende enlist-methoden komen overeen met de verschillende typen aanhaling die een resourcemanager mogelijk heeft. U gebruikt met name de EnlistVolatile methoden voor vluchtige resources en de EnlistDurable methode voor duurzame resources. Voor het gemak moet u, nadat u hebt besloten of u de EnlistDurable of EnlistVolatile methode wilt gebruiken op basis van de ondersteuning voor duurzaamheid van uw resource, uw resource inschakelen om deel te nemen aan twee fasen (2PC) door de IEnlistmentNotification interface voor uw resourcemanager te implementeren. Zie Een transactie doorvoeren in één fase en meerdere fasen voor meer informatie over 2PC.
Door de resourcemanager in te schakelen, zorgt de resourcemanager ervoor dat er callbacks van de transactiebeheerder worden opgehaald wanneer de transactie wordt doorgevoerd of afgebroken. Er is één exemplaar van IEnlistmentNotification per aanhaling. Normaal gesproken is er één aanhaling per transactie, maar een resourcemanager kan ervoor kiezen om meerdere keren in dezelfde transactie in te schakelen.
Na het inschakelen reageert de resourcemanager op de aanvragen van de transactie. Een duurzame resourcemanager slaat voldoende informatie op zodat deze het werk van de transactie ongedaan kan maken of opnieuw kan uitvoeren op resources die door de beheerder worden beheerd. Er zijn veel manieren om dit te doen; het bijhouden van versies van gegevens of het bijhouden van een logboek van de wijzigingen zijn twee veelvoorkomende technieken.
Wanneer de toepassing de transactie doorvoert, initieert de transactiebeheerder het protocol voor doorvoeren in twee fasen. De transactiebeheerder vraagt eerst elke in de lijst vermelde resourcemanager als deze klaar is om de transactie door te voeren. De resourcemanager moet zich voorbereiden op doorvoeren. Het leest zichzelf voor om de transactie door te voeren of af te breken.
Tijdens de voorbereidingsfase registreert de duurzame resourcemanager de oude en nieuwe gegevens in stabiele opslag, zodat de resourcemanager deze kan herstellen, zelfs als het systeem uitvalt. Als de resourcemanager zich kan voorbereiden, informeert deze de transactiebeheerder over of de transactie moet worden doorgevoerd of afgebroken. Als een Resource Manager een fout rapporteert om zich voor te bereiden, stuurt de transactiebeheerder een terugdraaiopdracht naar elke Resource Manager en geeft deze de fout aan van de doorvoering naar de toepassing.
Zodra de resourcemanager is voorbereid, moet deze wachten totdat deze een doorvoering ontvangt of callback van de transactiebeheerder in fase 2 afbreekt. Normaal gesproken wordt het hele protocol voor voorbereiden en doorvoeren voltooid in een fractie van een seconde. Als er systeem- of communicatiefouten zijn, kan de melding voor doorvoeren of afbreken mogelijk niet binnen komen voor minuten of uren. Gedurende deze periode twijfelt de resourcemanager over het resultaat van de transactie. Het weet niet of de transactie is doorgevoerd of afgebroken. Hoewel de resourcemanager twijfelt over een transactie, blijven de gegevens gewijzigd door de transactie vergrendeld te houden, waardoor deze wijzigingen van andere transacties worden geïsoleerd.
Wanneer een resourcemanager mislukt, worden alle in de lijst vermelde transacties afgebroken, met uitzondering van transacties die zijn voorbereid of vastgelegd vóór de fout. Wanneer een duurzame Resource Manager opnieuw wordt opgestart, wordt de vastgelegde status van de resources die worden beheerd, gereconstrueerd door de voorbereidingsinformatie op te halen die in de voorbereidingsfase is geschreven, en worden deze transacties doorgevoerd of afgebroken.
Kortom, het protocol voor doorvoeren in twee fasen en de resourcemanagers combineren om transacties atomisch en duurzaam te maken.
De Transaction klasse biedt ook de EnlistPromotableSinglePhase methode om een Promotable Single Phase Enlistment (PSPE) in te schakelen. Hierdoor kan een durable resource manager (RM) een transactie hosten en 'bezitten' die later kan worden geëscaleerd om indien nodig door de MSDTC te worden beheerd. Zie Optimalisatie met behulp van single phase Commit en Promotable Single Phase Notification voor één fase voor meer informatie hierover.
In dit gedeelte
De stappen die doorgaans worden gevolgd door een Resource Manager, worden beschreven in de volgende onderwerpen.
Resources inschakelen als deelnemers aan een transactie
Beschrijft hoe een duurzame of vluchtige resource kan worden opgenomen in een transactie.
Een transactie doorvoeren in één fase en meerdere fasen
Hierin wordt beschreven hoe een Resource Manager reageert op doorvoermeldingen en de doorvoering voorbereidt.
Hierin wordt beschreven hoe een duurzame Resource Manager herstelt na een fout.
Beveiligingsvertrouwensniveaus in toegang tot resources
Hierin wordt beschreven hoe de drie vertrouwensniveaus voor System.Transactions de toegang beperken tot de typen resources die System.Transactions beschikbaar worden gesteld.
Optimalisatie met single phase commit en promotable Single Phase Notification
Beschrijft optimalisatieprocedures die beschikbaar zijn voor implementaties van resourcemanagers.