Zarządzanie wstrzymanymi wystąpieniami

W przykładzie SuspendedInstanceManagement pokazano, jak zarządzać wystąpieniami przepływu pracy, które zostały zawieszone. Domyślną akcją dla WorkflowUnhandledExceptionBehavior elementu jest AbandonAndSuspend. Oznacza to, że domyślnie nieobsługiwane wyjątki zgłaszane z wystąpienia przepływu pracy hostowanego w obiekcie WorkflowServiceHost spowodują, że wystąpienie zostanie usunięte z pamięci (porzuconej) i trwałej/utrwalonej wersji wystąpienia, która ma zostać oznaczona jako zawieszone. Wstrzymane wystąpienie przepływu pracy nie będzie można uruchomić, dopóki nie zostanie ono otwarte.

W przykładzie pokazano, jak można zaimplementować narzędzie wiersza polecenia w celu wykonywania zapytań dotyczących wstrzymanych wystąpień oraz jak nadać użytkownikowi opcję wznowienia lub zakończenia wystąpienia. W tym przykładzie usługa przepływu pracy celowo zgłasza wyjątek, powodując zawieszenie. Narzędzie wiersza polecenia może następnie służyć do wykonywania zapytań dotyczących wystąpienia, a następnie wznawiania lub kończenie wystąpienia.

Demonstracje

WorkflowServiceHost with WorkflowUnhandledExceptionBehavior i WorkflowControlEndpoint in Windows Workflow Foundation (WF).

Dyskusja

Narzędzie wiersza polecenia zaimplementowane w tym przykładzie jest specyficzne dla implementacji magazynu wystąpień SQL dostarczanych w programie .NET Framework 4.6.1. Jeśli masz niestandardową implementację magazynu wystąpień, możesz dostosować to narzędzie, zastępując WorkflowInstanceCommand implementacje w przykładzie implementacjami specyficznymi dla magazynu wystąpień.

Podana implementacja uruchamia polecenia SQL względem magazynu wystąpień SQL bezpośrednio w celu wyświetlenia listy zawieszonych wystąpień i opiera się na WorkflowControlEndpoint dodaniu do WorkflowServiceHost elementu w celu wznowienia lub zakończenia wystąpień.

Aby skonfigurować, skompilować i uruchomić przykład

  1. Ten przykład wymaga włączenia następujących składników systemu Windows:

    1. Serwer kolejek komunikatów firmy Microsoft (MSMQ)

    2. SQL Server Express

  2. Skonfiguruj bazę danych programu SQL Server.

    1. W wierszu polecenia programu Visual Studio uruchom polecenie "setup.cmd" z przykładowego katalogu SuspendedInstanceManagement, który wykonuje następujące czynności:

      1. Tworzy bazę danych trwałości przy użyciu programu SQL Server Express. Jeśli baza danych trwałości już istnieje, zostanie ona porzucona i ponownie utworzona

      2. Konfiguruje bazę danych pod kątem trwałości.

      3. Dodaje do roli InstanceStoreUsers rolę APPPOOL\DefaultAppPool i NT AUTHORITY\Network Service, która została zdefiniowana podczas konfigurowania bazy danych pod kątem trwałości.

  3. Konfigurowanie kolejki usługi.

    1. W programie Visual Studio kliknij prawym przyciskiem myszy projekt SampleWorkflowApp i kliknij polecenie Ustaw jako projekt startowy.

    2. Skompiluj i uruchom aplikację SampleWorkflowApp, naciskając klawisz F5. Spowoduje to utworzenie wymaganej kolejki.

    3. Naciśnij klawisz Enter , aby zatrzymać aplikację SampleWorkflowApp.

    4. Otwórz konsolę zarządzania komputerem, uruchamiając polecenie Compmgmt.msc w wierszu polecenia.

    5. Rozwiń węzeł Usługi i aplikacje, Kolejki komunikatów, Kolejki prywatne.

    6. Kliknij prawym przyciskiem myszy kolejkę ReceiveTx i wybierz pozycję Właściwości.

    7. Wybierz kartę Zabezpieczenia i zezwól wszystkim na uprawnienia do odbierania wiadomości, podglądu wiadomości i wysyłania wiadomości.

  4. Teraz uruchom przykład.

    1. W programie Visual Studio ponownie uruchom projekt SampleWorkflowApp bez debugowania, naciskając klawisze Ctrl+F5. Dwa adresy punktu końcowego zostaną wydrukowane w oknie konsoli: jeden dla punktu końcowego aplikacji, a następnie drugi z okna WorkflowControlEndpoint. Następnie zostanie utworzone wystąpienie przepływu pracy, a w oknie konsoli zostaną wyświetlone rekordy śledzenia dla tego wystąpienia. Wystąpienie przepływu pracy zgłosi wyjątek powodujący wstrzymanie i przerwanie wystąpienia.

    2. Następnie narzędzie wiersza polecenia może służyć do podjęcia dalszych działań w przypadku dowolnego z tych wystąpień. Składnia argumentów wiersza polecenia jest następująca:

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

      Obsługiwane polecenia to: Query, Resumei Terminate. Przełącznik InstanceId jest wymagany tylko dla Resume operacji i Terminate .

Aby wyczyścić (opcjonalnie)

  1. Otwórz konsolę zarządzania komputerem, uruchamiając polecenie Compmgmt.msc.

  2. Rozwiń węzeł Usługi i aplikacje, Kolejki komunikatów, Kolejki prywatne.

  3. Usuń kolejkę ReceiveTx .

  4. Aby usunąć bazę danych trwałości, uruchom cleanup.cmd.