Поделиться через


Управление приостановленными инстанциями

В примере SuspendedInstanceManagement показано, как управлять экземплярами рабочих процессов, приостановленными. Действие по умолчанию для WorkflowUnhandledExceptionBehavior равно AbandonAndSuspend. Это означает, что по умолчанию необработанные исключения, созданные из экземпляра рабочего процесса, размещенного в WorkflowServiceHost, приводят к тому, что экземпляр удаляется из памяти (становится заброшенным), а его устойчивая или сохраняемая версия помечается как приостановленная. Приостановленный экземпляр рабочего процесса не сможет запускаться до тех пор, пока он не будет отключен.

В примере показано, как служебная программа командной строки может быть реализована для запроса приостановленных экземпляров и как предоставить пользователю возможность возобновить или завершить экземпляр. В этом примере служба рабочего процесса намеренно создает исключение, вызывая его приостановку. Затем утилита командной строки может использоваться для поиска экземпляра, а затем для его возобновления или завершения.

Демонстрирует

WorkflowServiceHost с WorkflowUnhandledExceptionBehavior и WorkflowControlEndpoint в Windows Workflow Foundation (WF).

Обсуждение

Программа командной строки, реализованная в этом примере, относится к реализации хранилища экземпляров SQL, которая поставляется в .NET Framework 4.6.1. Если у вас есть собственная реализация хранилища экземпляров, вы можете адаптировать эту утилиту, заменив реализации WorkflowInstanceCommand в примере на реализации, специфичные для вашего хранилища экземпляров.

Предоставленная реализация выполняет команды SQL в хранилище экземпляров базы данных SQL напрямую для перечисления приостановленных экземпляров; она полагается на WorkflowControlEndpoint, добавляемый к WorkflowServiceHost, чтобы возобновить или завершить эти экземпляры.

Настройка, сборка и запуск примера

  1. Для этого примера требуется включить следующие компоненты Windows:

    1. Сервер очередей сообщений Майкрософт (MSMQ)

    2. SQL Server Express

  2. Настройте базу данных SQL Server.

    1. В командной строке Visual Studio выполните команду "setup.cmd" из примера каталога SuspendedInstanceManagement, который выполняет следующие действия:

      1. Создает базу данных сохраняемости с помощью SQL Server Express. Если база данных сохраняемости уже существует, она удаляется и создается повторно.

      2. Настраивает базу данных для сохраняемости.

      3. Добавляет IIS APPPOOL\DefaultAppPool и NT AUTHORITY\Network Service в роль InstanceStoreUsers, определяемую при настройке базы данных для сохраняемости.

  3. Настройте очередь службы.

    1. В Visual Studio щелкните правой кнопкой мыши на проекте SampleWorkflowApp и выберите Установить как стартовый проект.

    2. Скомпилируйте и запустите SampleWorkflowApp, нажав клавишу F5. При этом будет создана требуемая очередь.

    3. Нажмите ввод, чтобы остановить приложение SampleWorkflowApp.

    4. Откройте консоль управления компьютером, выполнив Compmgmt.msc из командной строки.

    5. Разверните сервисы и приложения, очереди сообщений, частные очереди.

    6. Щелкните правой кнопкой мыши очередь ReceiveTx и выберите Свойства.

    7. Откройте вкладку "Безопасность" и разрешите Всем иметь разрешения на "Получение сообщения", "Просмотр сообщения"и "Отправку сообщения".

  4. Теперь запустите пример.

    1. В Visual Studio снова запустите проект SampleWorkflowApp без отладки, нажав клавиши CTRL+F5. Два адреса конечных точек будут напечатаны в окне консоли: один для конечной точки приложения, а затем другой из WorkflowControlEndpoint. Затем создается экземпляр рабочего процесса и записи отслеживания для этого экземпляра будут отображаться в окне консоли. Экземпляр рабочего процесса выбрасывает исключение, из-за чего экземпляр будет приостановлен и прерван.

    2. Затем утилиту командной строки можно использовать для дальнейших действий с любым из этих экземпляров. Синтаксис аргументов командной строки выглядит следующим образом:

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

      Поддерживаемые команды: Query, Resumeи Terminate. Параметр InstanceId требуется только для операций Resume и Terminate.

Очистка (необязательно)

  1. Откройте консоль управления компьютером, выполнив Compmgmt.msc.

  2. Разверните Службы и приложения, Очереди сообщений, Частные очереди.

  3. Удалите очередь ReceiveTx.

  4. Чтобы удалить базу данных сохраняемости, выполните cleanup.cmd.