Niet-persistente werkstroomexemplaren
Wanneer een nieuw exemplaar van een werkstroom wordt gemaakt dat de status in de SqlWorkflowInstanceStorewerkstroom behoudt, maakt de servicehost een vermelding voor die service in het exemplaararchief. Wanneer het werkstroomexemplaren vervolgens voor het eerst wordt bewaard, SqlWorkflowInstanceStore wordt de huidige exemplaarstatus opgeslagen. Als de werkstroom wordt gehost in de Windows Process Activation Service, worden de service-implementatiegegevens ook naar het exemplaararchief geschreven wanneer het exemplaar voor het eerst wordt bewaard.
Zolang het werkstroomexemplaren niet zijn behouden, heeft het een niet-persistente status. In deze status kan het werkstroomexemplaren niet worden hersteld nadat een toepassingsdomein is gerecycled, hostfout of computerfout.
De niet-persistente status
Duurzame werkstroomexemplaren die niet zijn behouden, blijven in de volgende gevallen in een niet-persistente status:
De servicehost loopt vast voordat het werkstroomexemplaren voor het eerst worden bewaard. Het werkstroomexemplaren blijven in het exemplaararchief en worden niet hersteld. Als er een gecorreleerd bericht binnenkomt, wordt het werkstroomexemplaren weer actief.
Het werkstroomexemplaren ondervinden een uitzondering voordat deze voor het eerst wordt bewaard. Afhankelijk van de UnhandledExceptionAction geretourneerde scenario's vinden de volgende scenario's plaats:
UnhandledExceptionAction is ingesteld op Abort: Wanneer er een uitzondering optreedt, worden service-implementatiegegevens naar het exemplaararchief geschreven en wordt het werkstroomexemplaren uit het geheugen verwijderd. Het werkstroomexemplaren blijven in een niet-persistente status en kunnen niet opnieuw worden geladen.
UnhandledExceptionAction is ingesteld op Cancel of Terminate: wanneer er een uitzondering optreedt, worden service-implementatiegegevens naar het exemplaararchief geschreven en wordt de status van het activiteitsexemplaren ingesteld op Closed.
Om het risico op niet-geladen niet-persistente werkstroomexemplaren te minimaliseren, raden we u aan om de werkstroom vroeg in de levenscyclus te behouden.
Detectie en verwijdering van niet-persistente exemplaren
Er SqlWorkflowInstanceStore worden geen niet-persistente werkstroomexemplaren uit het exemplaararchief verwijderd. Er worden ook geen verlopen vergrendelingseigenaren verwijderd waaraan niet-persistente werkstroomexemplaren zijn gekoppeld.
Het is raadzaam dat de beheerder het exemplaararchief periodiek controleert op niet-persistente exemplaren. Beheer istrators kunnen deze exemplaren verwijderen uit het exemplaararchief, zolang ze weten dat deze werkstroom geen gecorreleerde berichten ontvangt. Als het exemplaar bijvoorbeeld al enkele maanden in de database is en het bekend is dat de werkstroom doorgaans een levensduur van meerdere dagen heeft, is het veilig om ervan uit te gaan dat dit een geïnitialiseerd exemplaar is dat is gecrasht.
Als u niet-persistente exemplaren wilt vinden in de SQL Workflow Instance Store, kunt u de volgende SQL-query's gebruiken:
Met deze query worden alle exemplaren gevonden die niet zijn persistent en wordt de id en aanmaaktijd (opgeslagen in UTC-tijd) geretourneerd.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0
Met deze query worden alle exemplaren gevonden die niet zijn bewaard en die niet zijn geladen en worden de id en aanmaaktijd geretourneerd (opgeslagen in UTC-tijd) voor deze exemplaren.
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL
Met deze query worden alle onderbroken exemplaren gevonden die niet zijn persistent en worden de id, aanmaaktijd (opgeslagen in UTC-tijd), reden voor schorsing en uitzonderingsnaam geretourneerd.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1
Zorg ervoor dat u niet-persistente exemplaren verwijdert. Over het algemeen is het veilig om niet-persistente exemplaren te verwijderen die zijn gemaakt door WorkflowServiceHost die zijn onderbroken of niet worden geladen. Deze specifieke exemplaren kunnen uit het archief worden verwijderd door ze uit de [System.Activities.DurableInstancing].[Instances]
weergave te verwijderen met behulp van de volgende SQL-opdracht, waarbij de juiste exemplaar-id wordt vervangen.
delete [System.Activities.DurableInstancing].[Instances]
where InstanceId=’078a9bc4-ada5-4f9e-8cce-b0eb0009995f’
Waarschuwing
We raden u niet aan alle niet-persistente exemplaren te verwijderen, omdat dit exemplaren omvat die zojuist zijn gemaakt en nog niet zijn behouden.