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

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

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

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

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

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

Receive Действие

SendReply Действие

TransactedReceiveScope Действие

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

Примечание.

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

Службы рабочих процессов и привязки на основе 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) создается автоматически. Дополнительные сведения см. в разделе "Упрощенная конфигурация". Также для указания собственных конечных точек можно разместить файл Web.config в виртуальном каталоге. Если определение рабочего процесса находится в сборке, то можно разместить SVC-файл в виртуальном каталоге, а сборку рабочего процесса в каталоге с кодом приложения. SVC-файл должен указывать фабрику узла службы и класс, реализующий службу рабочего процесса. В следующем примере показан способ указания фабрики узла службы и класса, реализующего службу рабочего процесса.

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