Wstrzymane zarządzanie wystąpieniami
Przykład SuspendedInstanceManagement demonstruje, jak zarządzać wystąpieniami przepływu pracy, które zostały wstrzymane. Domyślną akcją WorkflowUnhandledExceptionBehavior jest AbandonAndSuspend
. Oznacza to, że domyślnie nieobsługiwane wyjątki zgłaszane z wystąpienia przepływu pracy hostowanego w WorkflowServiceHost spowodują, że wystąpienie zostanie usunięte z pamięci (porzucone), a trwała wersja wystąpienia zostanie oznaczona jako zawieszona. Nie można uruchomić wstrzymanej instancji przepływu pracy, dopóki nie zostanie ona odwieszona.
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 wywołuje wyjątek, powodując zawieszenie. Narzędzie wiersza polecenia może następnie służyć do wykonywania zapytań dotyczących wystąpienia, a później do jego wznowienia lub zakończenia.
Pokazuje
WorkflowServiceHost z WorkflowUnhandledExceptionBehavior i WorkflowControlEndpoint w programie 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 implementacje WorkflowInstanceCommand
w przykładzie implementacjami dostosowanymi do Twojego 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 dodanym do WorkflowServiceHost w celu wznowienia lub zakończenia wystąpień.
Aby skonfigurować, skompilować i uruchomić przykładowy program
Ten przykład wymaga włączenia następujących składników systemu Windows:
Serwer kolejek komunikatów firmy Microsoft (MSMQ)
SQL Server Express
Skonfiguruj bazę danych programu SQL Server.
W wierszu polecenia programu Visual Studio uruchom polecenie "setup.cmd" z przykładowego katalogu SuspendedInstanceManagement, który wykonuje następujące czynności:
Tworzy bazę danych utrwalania przy użyciu programu SQL Server Express. Jeśli baza danych trwałości już istnieje, zostanie ona porzucona i ponownie utworzona
Konfiguruje bazę danych pod kątem trwałości.
Dodaje IIS APPPOOL\DefaultAppPool i NT AUTHORITY\Network Service do roli InstanceStoreUsers, która została zdefiniowana podczas konfigurowania bazy danych w celu zapewnienia trwałości.
Skonfiguruj kolejkę usługi.
W programie Visual Studio kliknij prawym przyciskiem myszy projekt SampleWorkflowApp i kliknij Ustaw jako projekt początkowy.
Skompiluj i uruchom aplikację SampleWorkflowApp, naciskając F5. Spowoduje to utworzenie wymaganej kolejki.
Naciśnij wprowadź, aby zatrzymać aplikację SampleWorkflowApp.
Otwórz konsolę zarządzania komputerem, uruchamiając polecenie Compmgmt.msc w wierszu polecenia.
Rozwiń usługi i aplikacje, kolejkowanie komunikatów, kolejki prywatne.
Kliknij prawym przyciskiem myszy kolejkę ReceiveTx i wybierz Właściwości .
Wybierz kartę Security i zezwól Każdy, aby miał uprawnienia do odbierania wiadomości, podglądania wiadomościi wysyłania wiadomości.
Teraz uruchom przykład.
W programie Visual Studio ponownie uruchom projekt SampleWorkflowApp bez debugowania, naciskając Ctrl+F5. Dwa adresy punktu końcowego zostaną wydrukowane w oknie konsoli: jeden dla punktu końcowego aplikacji, a następnie drugi z WorkflowControlEndpoint. Następnie zostanie utworzona instancja przepływu pracy, a w oknie konsoli pojawią się zapisy śledzenia dla tej instancji. Wystąpienie przepływu pracy zgłosi wyjątek powodujący wstrzymanie i przerwanie wystąpienia.
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
,Resume
iTerminate
. Przełącznik InstanceId jest wymagany tylko w przypadku operacjiResume
iTerminate
.
Aby wyczyścić (opcjonalnie)
Otwórz konsolę zarządzania komputerem, uruchamiając polecenie Compmgmt.msc.
Rozwiń usługi i aplikacje, rozwiń kolejkowanie komunikatów, rozwiń kolejki prywatne.
Usuń kolejkę ReceiveTx.
Aby usunąć bazę danych stanu trwałego, uruchom cleanup.cmd.