Pausad instanshantering
Exemplet SuspendedInstanceManagement visar hur du hanterar arbetsflödesinstanser som har pausats. Standardåtgärden för WorkflowUnhandledExceptionBehavior är AbandonAndSuspend
. Det innebär att ohanterade undantag som genereras från en arbetsflödesinstans som finns i WorkflowServiceHost som standard gör att instansen tas bort från minnet (överges) och att den varaktiga/bevarade versionen av instansen markeras som pausad. En arbetsflödesinstans som har suspenderats kommer inte att kunna köras förrän den har återupptagits.
Exemplet visar hur ett kommandoradsverktyg kan implementeras för att fråga efter pausade instanser och hur du ger användaren möjlighet att återuppta eller avsluta instansen. I det här exemplet utlöser en arbetsflödestjänst avsiktligt ett undantag, vilket gör att den inaktiveras. Kommandoradsverktyget kan sedan användas för att fråga efter instansen och därefter återuppta eller avsluta instansen.
Demonstrerar
WorkflowServiceHost med WorkflowUnhandledExceptionBehavior och WorkflowControlEndpoint i Windows Workflow Foundation (WF).
Diskussion
Kommandoradsverktyget som implementeras i det här exemplet är specifikt för implementeringen av SQL-instansarkivet som levereras i .NET Framework 4.6.1. Om du har en anpassad implementering av instansarkivet kan du anpassa det här verktyget genom att ersätta de WorkflowInstanceCommand
implementeringarna i exemplet med implementeringar som är specifika för ditt instansarkiv.
Den angivna implementeringen kör SQL-kommandon mot SQL-instansarkivet direkt för att lista pausade instanser, och den förlitar sig på en WorkflowControlEndpoint som läggs till i WorkflowServiceHost för att återuppta eller avsluta instanserna.
Så här konfigurerar du, skapar och kör exemplet
Det här exemplet kräver att följande Windows-komponenter är aktiverade:
Microsoft Message Queues (MSMQ)-server
SQL Server Express
Konfigurera SQL Server-databasen.
Kör "setup.cmd" från exempelkatalogen SuspendedInstanceManagement från en Visual Studio-kommandotolk, vilket gör följande:
Skapar en beständig databas med SQL Server Express. Om beständighetsdatabasen redan finns tas den bort och återskapas
Konfigurerar databasen för beständighet.
Lägger till IIS APPPOOL\DefaultAppPool och NT AUTHORITY\Network Service till rollen InstanceStoreUsers som definierades när databasen konfigurerades för beständighet.
Konfigurera tjänstkön.
I Visual Studio högerklickar du på projektet SampleWorkflowApp och klickar på Ange som startprojekt.
Kompilera och kör SampleWorkflowApp genom att trycka på F5. Då skapas den kö som krävs.
Tryck på Enter för att stoppa SampleWorkflowApp.
Öppna datorhanteringskonsolen genom att köra Compmgmt.msc från en kommandotolk.
Expandera Tjänster och Applikationer, Meddelandeköer, Privata Köer.
Högerklicka på kön ReceiveTx och välj Egenskaper.
Välj fliken Säkerhet och låt Alla ha behörighet att ta emot meddelande, Granska meddelandeoch Skicka meddelande.
Kör exemplet nu.
I Visual Studio kör du SampleWorkflowApp-projektet igen utan att felsöka genom att trycka på Ctrl+F5. Två slutpunktsadresser skrivs ut i konsolfönstret: en för programslutpunkten och sedan en annan från WorkflowControlEndpoint. En arbetsflödesinstans skapas sedan och spårningsposter för den instansen visas i konsolfönstret. Arbetsflödesinstansen utlöser ett undantag som gör att instansen pausas och avbryts.
Kommandoradsverktyget kan sedan användas för att vidta ytterligare åtgärder på någon av dessa instanser. Syntaxen för kommandoradsargument är följande:
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
Kommandona som stöds är:
Query
,Resume
ochTerminate
. InstanceId-växeln krävs endast förResume
ochTerminate
åtgärder.
För att rensa (valfritt)
Öppna datorhanteringskonsolen genom att köra Compmgmt.msc.
Expandera Tjänster och Applikationer, Meddelandehantering, Privata Köer.
Ta bort kön ReceiveTx.
Om du vill ta bort beständighetsdatabasen kör du cleanup.cmd.