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


Общие сведения о службах рабочих процессов

Данный раздел относится к версии Windows Workflow Foundation 4.

Службы рабочих процессов — это службы на основе WCF, которые реализованы с помощью рабочих процессов. Службы рабочих процессов являются рабочими процессами, использующими действия обмена сообщениями для отправки и получения сообщений Windows Communication Foundation (WCF). Платформа .NET Framework, версия 4 представляет несколько действий обмена сообщениями, позволяющих отправлять и получать сообщения из рабочего процесса. Дополнительные сведения о действиях обмена сообщениями и их использования для реализации различных шаблонов обмена сообщениями см. в разделе Использование действий обмена сообщениями.

Преимущества использования служб рабочих процессов

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

Реализация службы рабочего процесса

При реализации службы WCF выполняется определение контрактов, описывающих службу, и данных, которые она отправляет и получает. Данные, представленные в виде контрактов данных и сообщений. Службы WCF и службы рабочих процессов используют контракты данных и определения контрактов сообщений как часть описаний служб. Служба сама предоставляет метаданные (в форме WSDL) для описания операций службы. В WCF контракты службы и операций определяют службу и операции, которые она поддерживает. Однако в службе рабочего процесса эти контракты являются частью самого бизнес-процесса. Они поставляются в метаданные процессом, называемым выводом контракта. При размещении службы рабочего процесса с использованием WorkflowServiceHost просматривается определение рабочего процесса и формируется контракт на основе набора действий по отправке и получению сообщений, обнаруженных в рабочем процессе. В частности, для создания контракта используются следующие действия и свойства:

Действие Receive

Действие SendReply

Действие TransactedReceiveScope

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

Dd456797.note(ru-ru,VS.100).gifПримечание
.NET Framework 4 не позволяет писать службы рабочего процесса с использованием существующего определения контракта без дополнительных средств разработки. Контракты служб рабочих процессов создаются посредством процесса вывода, который был рассмотрен ранее. Контракты сообщений и данных, тем не менее, полностью поддерживаются.

Службы рабочих процессов и привязки на основе очереди сообщений (MSMQ)

WCF определяет две привязки на основе очереди сообщений (MSMQ) — NetMsmqBinding и MsmqIntegrationBinding. Привязки на основе очереди сообщений (MSMQ) часто используются со службами рабочих процессов, что связано с продолжительностью работы таких служб. Привязки на основе очереди сообщений (MSMQ) имеют свойство ValidityDuration, определяющее срок, в течение которого сообщения MSMQ считаются достоверными. Из-за длительного срока работы служб рабочих процессов возможно, что длительность достоверности сообщения MSMQ закончится до того, как служба рабочих процессов сможет его обработать. Поэтому очень важно задать для длительности достоверности привязки MSMQ подходящее значение. Это значение должно выбираться на основе рабочего процесса и способа, с помощью которого он обрабатывает сообщения. Например, если имеется рабочий процесс с действием Receive, сопровождаемым пользовательским действием, которое выполняется 10 минут, и действием Receive, правильное значение ValidityDuration должно превышать 10 минут.

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

Подобно службам WCF, службы рабочих процессов необходимо размещать. Службы WCF используют для размещения служб класс ServiceHost, а службы рабочих процессов — класс WorkflowServiceHost. Подобно службам WCF, службы рабочих процессов можно размещать несколькими способами, например:

  • в управляемом приложении платформы .NET Framework;

  • в службах IIS;

  • в службе WAS;

  • в управляемой службе Windows.

Службы рабочих процессов, размещаемые в управляемом приложении платформы .NET Framework либо в управляемой службе Windows, создают экземпляр класса WorkflowServiceHost и передают его экземпляру WorkflowService, содержащему определение рабочего процесса в свойстве Body. Определение рабочего процесса, содержащее действия обмена сообщениями, предоставлено службой рабочего процесса.

Для размещения службы рабочего процесса в IIS или WAS поместите XAMLX-файл, содержащий определение службы рабочего процесса, в виртуальный каталог. Конечная точка по умолчанию (использующая BasicHttpBinding) создается автоматически Дополнительные сведения см. в разделе Simplified Configuration. Также для указания собственных конечных точек можно разместить файл Web.config в виртуальном каталоге. Если определение рабочего процесса находится в сборке, то можно разместить SVC-файл в виртуальном каталоге, а сборку рабочего процесса в каталоге с кодом приложения. SVC-файл должен указывать фабрику узла службы и класс, реализующий службу рабочего процесса. В следующем примере показан способ указания фабрики узла службы и класса, реализующего службу рабочего процесса.

<%@ServiceHost Factory=" System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory
Service="EchoService"%>