Akce uzamčené výjimky instance
Vlastnost InstanceLockedExceptionAction úložiště instancí pracovního postupu SQL umožňuje určit, jakou akci má zprostředkovatel trvalosti SQL provést, když obdrží InstanceLockedException. Zprostředkovatel trvalosti obdrží tuto výjimku, když se pokusí uzamknout instanci služby pracovního postupu, která je aktuálně uzamčena jiným hostitelem služby. Hodnoty této vlastnosti jsou NoRetry, BasicRetrya AggressiveRetry. Výchozí hodnota je NoRetry. Následující seznam popisuje tyto tři možnosti:
NoRetry. Hostitel služby se nepokusí uzamknout instanci služby pracovního postupu a předá InstanceLockedException volajícímu. Pokud pracovní postup zůstane v paměti po dobu delší než 60 sekund, použijte NoRetry jako opakování. Výchozí hodnota je NoRetry.
BasicRetry. Hostitel služby znovu zamkne instanci služby pracovního postupu s lineárním intervalem mezi opakovanými pokusy a předá InstanceLockedException volajícímu na konci sekvence. Pokud pracovní postup zůstane v paměti přibližně 5 až 60 sekund a zprávy dorazí v dávkách, ve kterých je pravděpodobnější, že zprávy odeslané do stejné instance na stejném hostiteli zpracují všechny zprávy před uvolněním pracovního postupu, použijte BasicRetry k dosažení nejlepší latence bez plýtvání prostředky.
AggressiveRetry. Hostitel služby znovu zamkne instanci služby pracovního postupu s exponenciálním intervalem mezi opakovanými pokusy a předá výjimku volajícímu na konci sekvence. Pokud pracovní postup zůstane v paměti po velmi krátkou dobu (méně než 5 sekund) nebo je webová farma velká a pravděpodobnost doručení další zprávy stejnému hostiteli není příliš vysoká, použijte AggressiveRetry k dosažení co nejvyšší latence.
Funkce Akce výjimky Uzamčená instance podporuje následující scénáře. Ve všech scénářích, pokud instanceLockedExceptionAction vlastnost SqlWorkflowInstanceStore je nastavena na BasicRetry nebo AggressiveRetry, hostitel transparentně opakuje, aby získal zámek na instancích pravidelně.
Umožňuje řádné vypnutí a překrývající se recyklaci aplikačních domén. Předpokládejme, že se recykluje appDomain s hostitelem služby, na kterém běží instance služby pracovního postupu, a nová doména AppDomain se vytvoří, aby paralelně zpracovávala nové požadavky, zatímco stará doména AppDomain je řádně vyřazena. Vypnutí počká, dokud instance služby pracovního postupu nebudou nečinné, a pak instance zachovají a uvolní. Jakékoli pokusy hostitelů v nové doméně AppDomain o uzamčení instance způsobí InstanceLockedException.
Horizontální škálování odolných pracovních postupů napříč homogenní farmou serverů Předpokládejme, že uzel serverové farmy, na kterém je spuštěná instance pracovního postupu, dojde k chybovému ukončení a hostitel pracovního postupu nemůže odebrat zámky u spuštěné instance. Když hostitel služby spuštěný na jiném uzlu farmy obdrží zprávu pro tuto instanci pracovního postupu, pokusí se získat zámky na těchto instancích, které obdrží InstanceLockedException. Zámky po nějaké době vyprší, protože hostitel, který měl zámek obnovit, už neexistuje.
Horizontální škálování odolných pracovních postupů napříč homogenní farmou serverů Předpokládejme, že chcete horizontálně škálovat trvalý pracovní postup pomocí více hostitelů za službou VYROVNÁVÁNÍ zatížení sítě (síťová Load Balancer), hostitel pracovního postupu spuštěný na jednom uzlu farmy načte instanci pracovního postupu a zpracovává zprávu a další zpráva do instance je směrována na hostitele, který běží na jiném uzlu, protože vyrovnávání zatížení sítě nemá algoritmus směrování pro doručování zpráv hostiteli, na kterém už je instance spuštěná. Po přijetí zprávy se druhý hostitel pokusí načíst instanci pracovního postupu a obdrží InstanceLockedException zprávu, protože první hostitel má na instanci zámek. První hostitel odemkne instanci po dokončení zpracování první zprávy a druhý hostitel získá zámek při dalším pokusu, načte instanci a zpracuje druhou zprávu.