Внутренние особенности размещения службы рабочего процесса

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

Обзор WorkflowServiceHost

Класс WorkflowServiceHost используется для размещения служб рабочего процесса. Он прослушивает входящие сообщения и перенаправляет их соответствующему экземпляру службы рабочих процессов, создавая при необходимости новые экземпляры или загружая существующие из долговременного хранилища. На следующей схеме показан высокий уровень WorkflowServiceHost работы:

Diagram that shows an overview of the Workflow Service Host.

Из схемы видно, что объект WorkflowServiceHost загружает определения служб рабочих процессов из XAMLX-файлов, а сведения о конфигурации из файла конфигурации. Кроме того, он загружает конфигурацию отслеживания из профиля отслеживания. WorkflowServiceHost предоставляет конечную точку управления рабочим процессом, которая позволяет отправлять экземплярам рабочих процессов команды управления. Дополнительные сведения см . в примере конечной точки управления рабочими процессами.

Объект WorkflowServiceHost предоставляет также конечные точки приложений, которые прослушивают входящие сообщения приложений. При поступлении входящего сообщения оно перенаправляется соответствующему экземпляру службы рабочих процессов (если он в данный момент загружен). При необходимости создается новый экземпляр рабочего процесса. Если имеется сохраненный экземпляр, он загружается из хранилища.

Подробные сведения о классе WorkflowServiceHost

На следующей схеме показано, как WorkflowServiceHost обрабатывать сообщения более подробно.

Diagram that shows the Workflow Service Host message flow.

На схеме изображены три различные конечные точки: конечная точка приложения, конечная точка управления рабочим процессом и конечная точка размещения рабочего процесса. Конечная точка приложения получает сообщения, связанные с конкретным экземпляром рабочего процесса. Конечная точка управления рабочим процессом прослушивает команды управления. Конечная точка размещения рабочего процесса прослушивает сообщения, при поступлении которых объект WorkflowServiceHost загружает и выполняет рабочие процессы, не относящиеся к службе. Как показано на схеме, все сообщения обрабатываются средой выполнения WCF. Регулирование экземпляра службы рабочих процессов осуществляется с помощью свойства MaxConcurrentInstances. Это свойство ограничивает количество одновременно функционирующих экземпляров службы рабочих процессов. После превышения этого ограничения все дополнительные запросы на создание новых экземпляров службы рабочего процесса или на активацию постоянных экземпляров службы заносятся в очередь. Поставленные в очередь запросы обрабатываются в последовательном порядке без учета того, являются ли они запросами к новому экземпляру или к работающему, постоянному экземпляру. Загруженные сведения о политике узла определяют, что происходит с необработанными исключениями, а также задают порядок выгрузки и сохранения бездействующих служб Workflow Services. Дополнительные сведения об этих разделах см. в статье "How to: Configure Workflow Unhandled Exception Behavior with WorkflowServiceHost and How to: Configure Idle Behavior with WorkflowServiceHost". Экземпляры рабочих процессов сохраняются в соответствии с политиками узла размещения и повторно загружаются при необходимости. Дополнительные сведения о сохраняемости рабочих процессов см. в статье "Практическое руководство. Настройка сохраняемости с помощью WorkflowServiceHost", создание длительно работающей службы рабочих процессов и сохраняемость рабочих процессов.

На следующем рисунке показан поток при вызове WorkflowServiceHost.Open:

Diagram that shows the flow when WorkflowServiceHost.Open is called.

Рабочий процесс загружается из XAML, и создается дерево действий. Объект WorkflowServiceHost проходит по дереву действий и создает описание службы. К узлу размещения применяются параметры конфигурации. По завершении этих действий узел начинает прослушивать входящие сообщения.

На следующем рисунке показано, что WorkflowServiceHost делает при получении сообщения, привязанного к действию Получения, для которому задано значение trueCanCreateInstance:

Decision tree used by the WFS Host when it receives a message and CanCreateInstance is true.

Сообщение поступает и обрабатывается стеком каналов WCF. Производится проверка ограничений, и выполняются запросы корреляции. Если сообщение привязано к существующему экземпляру, производится его доставка. Если необходимо создать новый экземпляр, производится проверка свойства CanCreateInstance действия Receive. Если оно имеет значение true, создается новый экземпляр, которому и перенаправляется сообщение.

На следующем рисунке показано, что делает объект WorkflowServiceHost при получении сообщения, привязанного к действию Receive, если его свойство CanCreateInstance имеет значение false.

Decision tree used by the WFS Host when it receives a message and CanCreateInstance is false.

Сообщение поступает и обрабатывается стеком каналов WCF. Производится проверка ограничений, и выполняются запросы корреляции. Сообщение привязывается к существующему экземпляру (так как свойство CanCreateInstance имеет значение false), для чего экземпляр загружается из хранилища, возобновляется закладка и выполняется рабочий процесс.

Предупреждение

Открытие узла размещения служб рабочих процессов завершится с ошибкой, если SQL Server настроен для прослушивания только по протоколу NamedPipe.

См. также