Управление приостановленными инстанциями
В примере SuspendedInstanceManagement показано, как управлять экземплярами рабочих процессов, приостановленными. Действие по умолчанию для WorkflowUnhandledExceptionBehavior равно AbandonAndSuspend
. Это означает, что по умолчанию необработанные исключения, созданные из экземпляра рабочего процесса, размещенного в WorkflowServiceHost, приводят к тому, что экземпляр удаляется из памяти (становится заброшенным), а его устойчивая или сохраняемая версия помечается как приостановленная. Приостановленный экземпляр рабочего процесса не сможет запускаться до тех пор, пока он не будет отключен.
В примере показано, как служебная программа командной строки может быть реализована для запроса приостановленных экземпляров и как предоставить пользователю возможность возобновить или завершить экземпляр. В этом примере служба рабочего процесса намеренно создает исключение, вызывая его приостановку. Затем утилита командной строки может использоваться для поиска экземпляра, а затем для его возобновления или завершения.
Демонстрирует
WorkflowServiceHost с WorkflowUnhandledExceptionBehavior и WorkflowControlEndpoint в Windows Workflow Foundation (WF).
Обсуждение
Программа командной строки, реализованная в этом примере, относится к реализации хранилища экземпляров SQL, которая поставляется в .NET Framework 4.6.1. Если у вас есть собственная реализация хранилища экземпляров, вы можете адаптировать эту утилиту, заменив реализации WorkflowInstanceCommand
в примере на реализации, специфичные для вашего хранилища экземпляров.
Предоставленная реализация выполняет команды SQL в хранилище экземпляров базы данных SQL напрямую для перечисления приостановленных экземпляров; она полагается на WorkflowControlEndpoint, добавляемый к WorkflowServiceHost, чтобы возобновить или завершить эти экземпляры.
Настройка, сборка и запуск примера
Для этого примера требуется включить следующие компоненты Windows:
Сервер очередей сообщений Майкрософт (MSMQ)
SQL Server Express
Настройте базу данных SQL Server.
В командной строке Visual Studio выполните команду "setup.cmd" из примера каталога SuspendedInstanceManagement, который выполняет следующие действия:
Создает базу данных сохраняемости с помощью SQL Server Express. Если база данных сохраняемости уже существует, она удаляется и создается повторно.
Настраивает базу данных для сохраняемости.
Добавляет IIS APPPOOL\DefaultAppPool и NT AUTHORITY\Network Service в роль InstanceStoreUsers, определяемую при настройке базы данных для сохраняемости.
Настройте очередь службы.
В Visual Studio щелкните правой кнопкой мыши на проекте SampleWorkflowApp и выберите Установить как стартовый проект.
Скомпилируйте и запустите SampleWorkflowApp, нажав клавишу F5. При этом будет создана требуемая очередь.
Нажмите ввод, чтобы остановить приложение SampleWorkflowApp.
Откройте консоль управления компьютером, выполнив Compmgmt.msc из командной строки.
Разверните сервисы и приложения, очереди сообщений, частные очереди.
Щелкните правой кнопкой мыши очередь
ReceiveTx и выберите Свойства .Откройте вкладку "Безопасность" и разрешите Всем иметь разрешения на "Получение сообщения", "Просмотр сообщения"и "Отправку сообщения".
Теперь запустите пример.
В Visual Studio снова запустите проект SampleWorkflowApp без отладки, нажав клавиши CTRL+F5. Два адреса конечных точек будут напечатаны в окне консоли: один для конечной точки приложения, а затем другой из WorkflowControlEndpoint. Затем создается экземпляр рабочего процесса и записи отслеживания для этого экземпляра будут отображаться в окне консоли. Экземпляр рабочего процесса выбрасывает исключение, из-за чего экземпляр будет приостановлен и прерван.
Затем утилиту командной строки можно использовать для дальнейших действий с любым из этих экземпляров. Синтаксис аргументов командной строки выглядит следующим образом:
SuspendedInstanceManagement -Command:[CommandName] -Server:[ServerName] -Database:[DatabaseName] -InstanceId:[InstanceId]
Поддерживаемые команды:
Query
,Resume
иTerminate
. Параметр InstanceId требуется только для операцийResume
иTerminate
.
Очистка (необязательно)
Откройте консоль управления компьютером, выполнив Compmgmt.msc.
Разверните Службы и приложения, Очереди сообщений, Частные очереди.
Удалите очередь ReceiveTx.
Чтобы удалить базу данных сохраняемости, выполните cleanup.cmd.