Netrvalé instance pracovních postupů
Když se vytvoří nová instance pracovního postupu, která uchovává její stav v SqlWorkflowInstanceStoreúložišti instancí, hostitel služby vytvoří položku pro tuto službu v úložišti instancí. Následně, když je instance pracovního postupu uložena poprvé, SqlWorkflowInstanceStore uloží aktuální stav instance. Pokud je pracovní postup hostovaný ve službě aktivace procesu systému Windows, data nasazení služby se také zapisují do úložiště instancí při prvním uložení instance.
Pokud instance pracovního postupu nebyla zachována, je v neudrženém stavu. V tomto stavu nelze instanci pracovního postupu obnovit po recyklaci domény aplikace, selhání hostitele nebo selhání počítače.
Neudržovaný stav
Trvalé instance pracovního postupu, které nebyly zachovány, zůstávají v neudržované stavu v následujících případech:
Hostitel služby se chybově ukončí, než se instance pracovního postupu poprvé zachová. Instance pracovního postupu zůstává v úložišti instancí a není obnovena. Pokud dorazí korelovaná zpráva, instance pracovního postupu se znovu aktivuje.
Instance pracovního postupu zaznamená výjimku předtím, než se poprvé zachová. V závislosti na vrácených UnhandledExceptionAction scénářích dochází k následujícím scénářům:
UnhandledExceptionAction je nastavena na Abort: Pokud dojde k výjimce, informace o nasazení služby se zapisují do úložiště instancí a instance pracovního postupu se uvolní z paměti. Instance pracovního postupu zůstává v nezachovaném stavu a nelze ji znovu načíst.
UnhandledExceptionAction je nastavena na Cancel hodnotu nebo Terminate: Pokud dojde k výjimce, informace o nasazení služby se zapíšou do úložiště instancí a stav instance aktivity je nastaven na Closedhodnotu .
Pokud chcete minimalizovat riziko, že dojde k nenačteným ne trvalým instancím pracovního postupu, doporučujeme pracovní postup zachovat v rané fázi jeho životního cyklu.
Detekce a odebrání nezachovaných instancí
Neodebere SqlWorkflowInstanceStore žádné instance pracovních postupů, které nejsou trvalé, z úložiště instancí. Neodebere také žádné vlastníky zámků s vypršenou platností, kteří mají přidružené nechované instance pracovního postupu.
Doporučujeme, aby správce pravidelně kontroloval úložiště instancí pro neudržované instance. Správa istrátory mohou tyto instance z úložiště instancí odebrat, pokud vědí, že tento pracovní postup nebude přijímat korelované zprávy. Pokud je například instance v databázi několik měsíců a je známo, že pracovní postup má obvykle životnost několika dnů, je bezpečné předpokládat, že se jedná o inicializovanou instanci, která se chybově ukončila.
Pokud chcete najít nezachované instance v úložišti instancí pracovního postupu SQL, můžete použít následující dotazy SQL:
Tento dotaz vyhledá všechny instance, které nebyly zachovány, a vrátí id a čas vytvoření (uložený v čase UTC).
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0
Tento dotaz vyhledá všechny instance, které nebyly zachovány a které nejsou načteny, a vrátí pro ně ID a čas vytvoření (uložený v čase UTC).
select InstanceId, CreationTime from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and CurrentMachine is NULL
Tento dotaz najde všechny pozastavené instance, které nebyly zachovány, a vrátí ID, čas vytvoření (uložený v čase UTC), důvod pozastavení a název výjimky.
select InstanceId, CreationTime, SuspensionReason, SuspensionExceptionName from [System.Activities.DurableInstancing].[Instances] where IsInitialized = 0 and IsSuspended = 1
Při odstraňování nezachovaných instancí používejte opatrně. Obecně platí, že je bezpečné odebrat neuchované instance vytvořené WorkflowServiceHost , které jsou pozastavené nebo nejsou načteny. Tyto konkrétní instance je možné odstranit z úložiště odstraněním ze [System.Activities.DurableInstancing].[Instances]
zobrazení pomocí následujícího příkazu SQL a nahrazením správného ID instance.
delete [System.Activities.DurableInstancing].[Instances]
where InstanceId=’078a9bc4-ada5-4f9e-8cce-b0eb0009995f’
Upozorňující
Nedoporučujeme odebírat všechny neuchované instance, protože to zahrnuje instance, které byly právě vytvořeny a dosud nebyly zachovány.