Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Účastník trvalého uložení se může účastnit operace uložení nebo načtení, kterou spustí hostitel 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. Trvalý účastník se odvozuje z některé z těchto tříd, implementuje zajímavé metody a pak přidá instanci třídy do kolekce WorkflowExtensions na WorkflowServiceHost. Hostitel aplikace může při uchování instance pracovního postupu vyhledat taková rozšíření pracovního postupu a v příslušných momentech vyvolat vhodné metody pro účastníky uchování.
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 perzistence, který se také účastní vstupně-výstupních operací), vstupně-výstupní účastník se využívá 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 uchovávání, kteří byli přidáni do kolekce rozšíření přidružené k instanci pracovního postupu.
Vyvolává metodu CollectValues, kterou implementují všichni účastníci persistenčních operací.
Vyvolává metodu MapValues, kterou implementují všichni účastníci persistenčních operací.
Pracovní postup zachovejte nebo uložte do úložiště trvalosti.
Vyvolá metodu BeginOnSave pro všechny účastníky persistentních I/O operací. Pokud účastník není vstupně-výstupní účastník, tento úkol se přeskočí. Pokud je stav trvalosti transakční, transakce je k dispozici ve vlastnosti Transaction.Current.
Čeká na dokončení všech účastníků perzistence. 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 třídy PersistenceIOParticipant a může implementovat metodu BeginOnSave kromě metod CollectValues a MapValues.
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ů v systému trvanlivosti 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 persistence 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 uchovávání, kteří byli přidáni do kolekce rozšíření přidružené k instanci pracovního postupu.
Načte pracovní postup z úložiště trvalosti.
Vyvolá BeginOnLoad u všech účastníků vstupně-výstupních operací persistence a čeká, až všechny účastníci persistence dokončí. 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 persistentního úložiště.
Vyvolá PublishValues na každém účastníkovi persistenci.
Účastník trvalosti je odvozen od třídy PersistenceParticipant a může implementovat metodu PublishValues. Úč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 poté zkusit znovu, nebo vynutit načtení, což způsobí, že jiný hostitel nebude moci uložit svou práci.
Ve scénáři s jedním uzlem došlo k selhání hostitele. Když se hostitel znovu spustí (restart procesu nebo vytvoření nové továrny trvalostního poskytovatele), nový hostitel se pokusí načíst instanci, která je stále uzamčena starým hostitelem, protože platnost zámku ještě nevypršela.
Ve scénáři s jedním uzlem byla dotčená instance v určitém okamžiku přerušena a byla vytvořena nová instance poskytovatele perzistence, 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 .