Účastníci trvalosti
Účastník trvalosti se může účastnit operace trvalosti (Uložit nebo Načíst) aktivovaný hostitelem aplikace. Rozhraní .NET Framework 4.6.1 se dodává se dvěma abstraktními třídami: PersistenceParticipant a PersistenceIOParticipant, které můžete použít k vytvoření účastníka trvalosti. Účastník trvalosti je odvozen z jedné z těchto tříd, implementuje metody zájmu a pak přidá instanci třídy do WorkflowExtensions kolekce na WorkflowServiceHost . Hostitel aplikace může při zachování instance pracovního postupu vyhledat taková rozšíření pracovního postupu a v příslušných časech vyvolat příslušné metody pro účastníky trvalosti.
Následující seznam popisuje úlohy prováděné subsystémem trvalosti v různých fázích operace Zachovat (Uložit). Účastníci trvalosti se používají ve třetí a čtvrté fázi. Pokud je účastníkem vstupně-výstupní účastník (účastník trvalosti, který se také účastní vstupně-výstupních operací), účastník se použije také v šesté fázi.
Shromažďuje předdefinované hodnoty, včetně stavu pracovního postupu, záložek, mapovaných proměnných a časového razítka.
Shromažďuje všechny účastníky trvalosti, které byly přidány do kolekce rozšíření přidružené k instanci pracovního postupu.
Vyvolá metodu CollectValues implementovanou všemi účastníky trvalosti.
Vyvolá metodu MapValues implementovanou všemi účastníky trvalosti.
Pracovní postup zachovejte nebo uložte do úložiště trvalosti.
Vyvolá metodu BeginOnSave pro všechny účastníky trvalosti vstupně-výstupních operací. Pokud účastník není vstupně-výstupní účastník, tento úkol se přeskočí. Pokud je epizoda trvalosti transakční, transakce je poskytována v Transaction.Current vlastnost.
Čeká na dokončení všech účastníků trvalosti. Pokud se všem účastníkům podaří zachovat data instance, potvrdí transakci.
Účastník trvalosti je odvozen z PersistenceParticipant třídy a může implementovat CollectValues a MapValues metody. Vstupně-výstupní účastník trvalosti je odvozen z PersistenceIOParticipant třídy a může implementovat BeginOnSave metoda kromě implementace CollectValues a MapValues metody.
Každá fáze se dokončí před zahájením další fáze. Například hodnoty se shromažďují od všech účastníků trvalosti v první fázi. Všechny hodnoty shromážděné v první fázi se pak poskytnou všem účastníkům trvalosti ve druhé fázi pro mapování. Pak jsou všechny hodnoty shromážděné a mapované v první a druhé fázi poskytovány poskytovateli trvalosti ve třetí fázi atd.
Následující seznam popisuje úlohy prováděné subsystémem trvalosti v různých fázích operace načítání. Účastníci trvalosti se používají ve čtvrté fázi. Účastníci trvalosti vstupně-výstupních operací (účastníci trvalosti, kteří se také účastní vstupně-výstupních operací), se používají také ve třetí fázi.
Shromažďuje všechny účastníky trvalosti, které byly přidány do kolekce rozšíření přidružené k instanci pracovního postupu.
Načte pracovní postup z úložiště trvalosti.
BeginOnLoad Vyvolá všechny vstupně-výstupní účastníky trvalosti a čeká na dokončení všech účastníků trvalosti. Pokud je epizoda trvalosti transakční, transakce je poskytována v Transaction.Current.
Načte instanci pracovního postupu do paměti na základě dat načtených z úložiště trvalosti.
PublishValues Vyvolá pro každého účastníka trvalosti.
Účastník trvalosti je odvozen z PersistenceParticipant třídy a může implementovat PublishValues metoda. Účastník trvalosti vstupně-výstupních operací je odvozen z PersistenceIOParticipant třídy a může implementovat BeginOnLoad metoda kromě implementace PublishValues metoda.
Při načítání instance pracovního postupu vytvoří zprostředkovatel trvalosti pro danou instanci zámek. Tím zabráníte načtení instance více než jedním hostitelem ve scénáři s více uzly. Pokud se pokusíte načíst instanci pracovního postupu, která byla uzamčena, zobrazí se výjimka podobná následující: Výjimka System.ServiceModel.Persistence.InstanceLockException: Požadovanou operaci nelze dokončit, protože zámek instance 00000000-0000-0000-0000-0000-000000000000 nelze získat". K této chybě dochází v případě, že dojde k některé z následujících situací:
Ve scénáři s více uzly je instance načtena jiným hostitelem. Existuje několik různých způsobů, jak tyto typy konfliktů vyřešit: předat zpracování uzlu, který vlastní zámek a opakování, nebo vynutit načtení, které způsobí, že ostatní hostitelé nebudou moct uložit svou práci.
Ve scénáři s jedním uzlem a hostitel se chybově ukončil. Po opětovném spuštění hostitele (recyklace procesu nebo vytvoření nové továrny zprostředkovatele trvalosti) se nový hostitel pokusí načíst instanci, která je stále uzamčena starým hostitelem, protože zámek ještě nevypršel.
Ve scénáři s jedním uzlem a dotčená instance byla v určitém okamžiku přerušena a vytvoří se nová instance zprostředkovatele trvalosti, která má jiné ID hostitele.
Hodnota časového limitu uzamčení má výchozí hodnotu 5 minut, můžete při volání Loadzadat jinou hodnotu časového limitu .