Pozastavená správa instancí

Ukázka SuspendedInstanceManagement ukazuje, jak spravovat instance pracovních postupů, které byly pozastaveny. Výchozí akce pro WorkflowUnhandledExceptionBehavior je AbandonAndSuspend. To znamená, že ve výchozím nastavení neošetřené výjimky vyvolané z instance pracovního postupu hostované v WorkflowServiceHost způsobí, že instance bude odstraněna z paměti (opouštěna) a její trvalá/verzovaná kopie bude označena jako pozastavená. Pozastavená instance pracovního postupu nebude moci běžet, dokud nebude zrušena.

Ukázka ukazuje, jak lze nástroj příkazového řádku implementovat k dotazování na pozastavené instance a jak dát uživateli možnost obnovit nebo ukončit instanci. V této ukázce služba pracovního postupu záměrně vyvolá výjimku, což způsobí, že se pozastaví. Nástroj příkazového řádku se pak dá použít k dotazování instance a následnému obnovení nebo ukončení instance.

Demonstruje

WorkflowServiceHost s WorkflowUnhandledExceptionBehavior a WorkflowControlEndpoint ve Windows Workflow Foundation (WF).

Diskuse

Nástroj příkazového řádku implementovaný v této ukázce je specifický pro implementaci úložiště instancí SQL, která se dodává v rozhraní .NET Framework 4.6.1. Pokud máte vlastní implementaci úložiště instancí, můžete tento nástroj přizpůsobit nahrazením WorkflowInstanceCommand implementací v ukázce implementacemi, které jsou specifické pro vaše úložiště instancí.

Poskytnutá implementace spouští příkazy SQL přímo na úložišti instancí SQL, aby vypsala pozastavené instance a spoléhá na to, že se WorkflowControlEndpoint přidá k WorkflowServiceHost za účelem obnovení nebo ukončení instancí.

Nastavení, sestavení a spuštění ukázky

  1. Tato ukázka vyžaduje, aby byly povoleny následující součásti systému Windows:

    1. Microsoft Message Queues (MSMQ) Server

    2. SQL Server Express

  2. Nastavte databázi SQL Serveru.

    1. Z příkazového řádku sady Visual Studio spusťte příkaz "setup.cmd" z ukázkového adresáře SuspendedInstanceManagement, který provede následující kroky:

      1. Vytvoří perzistentní databázi pomocí SQL Serveru Express. Pokud už databáze trvalosti existuje, dojde k jeho vyřazení a opětovnému vytvoření.

      2. Nastaví databázi pro trvalost.

      3. Přidá IIS APPPOOL\DefaultAppPool a NT AUTHORITY\Network Service do role InstanceStoreUsers, která byla definována při nastavování databáze pro perzistenci.

  3. Nastavte frontu služby.

    1. Ve Visual Studiu klikněte pravým tlačítkem na projekt SampleWorkflowApp a zvolte Nastavit jako spouštěný projekt.

    2. Zkompilujte a spusťte SampleWorkflowApp stisknutím klávesy F5. Tím se vytvoří požadovaná fronta.

    3. Stisknutím klávesy Enter zastavte SampleWorkflowApp.

    4. Otevřete konzolu Správa počítače spuštěním příkazu Compmgmt.msc z příkazového řádku.

    5. Rozbalte služby a aplikace, zasílatelství zpráv, privátní fronty.

    6. Klikněte pravým tlačítkem na frontu ReceiveTx a vyberte Vlastnosti.

    7. Vyberte kartu Zabezpečení a povolte všem mít oprávnění přijímat zprávy, Náhled zprávya Odeslat zprávu.

  4. Teď spusťte ukázku.

    1. V sadě Visual Studio znovu spusťte projekt SampleWorkflowApp bez ladění stisknutím klávesy Ctrl+F5. V okně konzoly budou vytištěny dvě adresy koncových bodů: jedna pro koncový bod aplikace a druhá z WorkflowControlEndpoint. Pak se vytvoří instance pracovního postupu a v okně konzoly se zobrazí záznamy sledování této instance. Instance pracovního postupu vyvolá výjimku, která způsobí pozastavení a přerušení instance.

    2. Nástroj příkazového řádku je pak možné použít k provedení dalších akcí u některé z těchto instancí. Syntaxe argumentů příkazového řádku je následující:

      SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]

      Podporované příkazy jsou: Query, Resumea Terminate. Přepínač InstanceId se vyžaduje jenom pro operace Resume a Terminate.

Pro vyčištění (volitelné)

  1. Otevřete konzolu Správa počítače spuštěním příkazu Compmgmt.msc.

  2. Rozbalte služby a aplikace, zasílatelství zpráv, privátní fronty.

  3. Odstraňte frontu ReceiveTx.

  4. Pokud chcete odebrat databázi trvalosti, spusťte cleanup.cmd.