Статьи

Службы с поддержкой рабочих процессов с Windows Workflow Foundation

Рабочий процесс — это набор действий, описывающих бизнес-процесс. Моделирование бизнес-процессов является ключевым требованием для разработки сервисных композиций. Рабочие процессы обеспечивают способ описания логики бизнес-процессов, выражая порядок выполнения и отношения между различными действиями. В этой статье, состоящей из вводного предварительного выпуска контента из будущей книги SOA с .NET [REF-1], рассказывается о Windows Workflow Foundation (WF) и исследуется, как его можно использовать для моделирования и реализации логики рабочих процессов в поддержку выполнения эта логика через составные сервисы. Эта статья написана Нитином Ганди и опубликовано в журнале SOA Magazine в мае 2009 г. 

Вступление

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

Продолжительность бизнес-процесса является важным фактором при моделировании рабочего процесса; некоторые бизнес-процессы могут включать в себя системы и вмешательство человека и потенциально могут выполняться в течение нескольких часов, дней или даже недель. Windows Workflow Foundation (WF), представленная в .NET 3.0, была создана для удовлетворения этих требований, как показано на рисунке 1.

 Рисунок 1: Windows Workflow Foundation является частью .NET 3.0.

Windows Workflow Foundation (WF) — это технология единого рабочего процесса для Windows. По сути, WF обеспечивает выполнение шагов, необходимых для завершения бизнес-процесса, и используется для создания приложений с поддержкой рабочих процессов на платформе Microsoft. Решения для рабочих процессов становятся все более важными по мере роста ориентированного на процессы представления программного обеспечения.

Платформа WF содержит модель программирования, механизм рабочих процессов и конструкторы для Visual Studio. Логика автоматизации в WF распространяется на несколько сценариев, включая ориентированные на документы рабочие процессы, человеческие рабочие процессы, рабочие процессы, управляемые бизнес-правилами, и другие. Он используется для включения как рабочих процессов человека, так и системы, а также для подключения непрозрачных блоков функциональности, которые называются действиями, представляющими отдельные шаги в бизнес-процессе. WF имеет расширяемую модель программирования для создания пользовательских действий, которые инкапсулируют функциональность рабочего процесса.

Архитектура Windows Workflow Foundation

Основные компоненты Windows Workflow Foundation (WF) показаны на рис. 2 и в таблице 1. WF включает в себя рабочий процесс, действия, базовую библиотеку действий WF, механизм выполнения WF и службы выполнения WF.

 

 

 Рисунок 2: Основные компоненты, составляющие Windows Workflow Foundation (WF). Каждый компонент WF объясняется в таблице 1.
Мероприятия Единица работы или отдельный шаг в бизнес-процессе.
Workflow Последовательность действий, используемая для реализации бизнес-процесса.
Рабочий процесс двигателя Экземпляр рабочего процесса создается и выполняется механизмом выполнения WF. Среда выполнения также управляет состоянием и связью с хост-процессом.
WF дизайнеры Инструменты пользовательского интерфейса, используемые для реализации рабочего процесса с использованием фигур. Visual Studio включает в себя дизайнер WF.
WF сервисы времени выполнения Услуги, которые обеспечивают гибкость хостинга и общения.
Хост-процесс Приложение, в котором размещен модуль времени выполнения WF, выполняющий рабочий процесс. Процесс хоста обеспечивает поддержку сервисов времени выполнения, таких как сохранение состояния рабочего процесса.

Таблица 1: Различные компоненты Windows Workflow Foundation (WF).

Службы времени выполнения WF — это архитектурные точки подключения для поставщиков дополнительных модулей. Например, поведение постоянства по умолчанию, предоставляемое механизмом времени выполнения, может быть изменено путем предоставления службы времени выполнения.

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

Workflows

Используя WF, а не вставляя логику рабочего процесса в исходный код, каждый шаг в бизнес-процессе определяется явно и выполняется механизмом рабочего процесса, обеспечивая более чистую, повторно используемую и поддерживаемую реализацию. Предоставляя общую технологию рабочих процессов, WF использовалась для создания решений рабочих процессов для различных продуктов Microsoft, что упрощает разработку на заказ.

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

Последовательные рабочие процессы

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

Рабочие процессы конечного

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

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

WF поддерживает пассивацию и активацию состояния экземпляра, что позволяет сериализовать экземпляр рабочего процесса в хранилище данных, такое как SQL Server. Экземпляр рабочего процесса может быть восстановлен в исходное состояние выполнения в любое время путем десериализации данных на основе событий или сообщений. 

мероприятия

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

Из коробки WF включает несколько действий, известных как библиотека базовых действий. Действия из базовой библиотеки действий, обычно используемые с последовательными рабочими процессами, перечислены в таблице 2.

 

Мероприятия Описание
Циклы и синхронизация действий
Если еще Это действие позволяет указывать условия в рабочем процессе. Двигатель времени выполнения оценивает условие и действует на его основе в зависимости от результата. Действие IfElse может содержать другие действия IfElse и действие IfElse по умолчанию, если не выполняется другое условие.
Пока Операция While принимает условие и оценивает его в начале каждой итерации. Если условие истинно, дочернее действие выполняется несколько раз, пока условие не станет ложным.
репликатор Действие Replicator выполняет дочернее действие определенное количество раз. Это похоже на оператор foreach в C #.
Последовательность Это действие используется для выполнения группы действий по одному в предварительно определенном порядке.
Параллельно Это действие выполняет две или более последовательности действий параллельно или с чередованием. Все действия последовательности должны быть выполнены, прежде чем рабочий процесс перейдет к следующему действию.
Деятельность, которая позволяет вмешательство человека
Слушать Это действие используется для простоя процесса рабочего процесса и ожидания вызова. Слушание обычно используется, когда требуется взаимодействие с человеком; он сериализует рабочий процесс и переходит в пассивный режим, когда ожидает вмешательства человека. Получив событие, он повторно активирует рабочий процесс и продолжает логику обработки.
EventDriven Действие Listen должно содержать дочерние действия, которые представляют человеческие события. Это реализуется с помощью действия EventDriven . Действие Listen должно содержать действия EventDriven .
HandleExternalEvent HandleExternalEvent вызывается , когда событие указано в интерфейсе с EventName поднято. Действие HandleExternalEvent используется WF для связи с внешней службой.
задержка Это действие используется для приостановки выполнения рабочего процесса на определенный период времени.
Действия, которые вызывают и выполняют код
Код Операция Code позволяет вводить исходный код непосредственно в рабочий процесс. Он запускает событие ExecuteCode, которое выполняет код. Код может вызвать внешнюю сборку.
CallExternalMethod Это действие используется для вызова метода в классе, доступном для рабочего процесса. Интерфейс и его реализация должны быть доступны в одной сборке.
InvokeWorkflow Это действие вызывает другой рабочий процесс, чтобы начать выполнение.
InvokeWebService Это действие вызывает веб-сервис, внешний по отношению к приложению рабочего процесса. Это действие создает веб-ссылку на веб-службу и позволяет вызывать операции с ней.
WebServiceInput Действие WebServiceInput позволяет рабочему процессу получать запрос веб-службы.
WebServiceOutput WebServiceOutput пар деятельности с WebServiceInput деятельности для ответа на запрос на обслуживание. Чтобы использовать это действие, сначала необходимо настроить действие WebServiceInput .
TransactionScope Это действие используется для представления System.Transactions в WF. Он поддерживает все свойства, которые в настоящее время поддерживаются System.Transactions .
прекратить Это действие используется для прекращения выполнения рабочего процесса.

Таблица 2: Базовые действия библиотеки, обычно используемые с последовательными рабочими процессами.

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

Библиотека базовых действий включает в себя несколько действий, предназначенных для включения рабочих процессов конечного автомата в WF, как показано в таблице 3.

Мероприятия Описание
высказывать Это действие представляет состояние в рабочем процессе конечного автомата. При наступлении события рабочий процесс переходит из одного действия состояния в новое действие состояния.
EventDriven EventDriven активность представляет собой обработчик событий в государственной машине и находится внутри государственной деятельности. Они представляют легальные события для государства.
SetState Это действие используется для моделирования переходов в рабочем процессе конечного автомата. Он включает свойство TargetStateName, которое указывает на состояние назначения.
StateInitialization и StateFinalization Операция StateInitialization выполняется, когда конечный автомат переходит в состояние, содержащее действие инициализации. Операция StateFinalization выполняется, когда конечный автомат выходит из состояния. Эти действия используются для выполнения предварительной и последующей обработки в состоянии.

Таблица 3: Базовые действия библиотеки, обычно используемые с рабочими процессами конечного автомата.

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

Рабочая среда рабочего процесса

Экземпляр рабочего процесса создается и выполняется механизмом выполнения рабочего процесса. Среда выполнения опирается на несколько служб времени выполнения для сохранения состояния рабочего процесса, управления транзакциями, отслеживания выполнения рабочего процесса и других функций. Каждый экземпляр механизма выполнения может одновременно поддерживать несколько экземпляров рабочего процесса. Экземпляр рабочего процесса выполняется в хост-процессе или в домене приложения и может размещаться на веб-сайтах ASP.NET, в формах Windows, службах Windows, веб-службах или Sharepoint.

Механизм выполнения работает на основе сервисов выполнения, которые обеспечивают богатую среду выполнения для транзакций, постоянства, отслеживания изменений, таймера и потоков. Службы времени выполнения могут быть дополнены подключением пользовательских служб, которые позволяют изменять поведение механизма времени выполнения в соответствии с конкретными требованиями среды выполнения. Для большинства реализаций рабочих процессов реализация служб времени выполнения по умолчанию отвечает потребностям. Тем не менее, в некоторых случаях поведение двигателя времени выполнения может потребоваться изменить. Например, рабочий процесс может потребовать, чтобы хост-приложение и механизм выполнения взаимодействовали по-разному, а для этого потребовалось бы создание пользовательских служб.

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

 Рисунок 3: Рабочий процесс, выполняемый движком рабочего процесса.


Модель программирования

WF Классы Windows Workflow Foundation (WF) инкапсулированы в три пространства имен, как показано на рисунке 4. Сборка System.Workflow.Runtime содержит класс WorkflowRuntime, который используется для создания экземпляра рабочего процесса.

 Рисунок 4. Классы Workflow Foundation инкапсулированы в три пространства имен.

Представленное здесь приложение рабочего процесса представляет собой простую функцию калькулятора, показанную на рисунке 5. Последовательный рабочий процесс содержит действие калькулятора. Хост создает экземпляр рабочего процесса и предоставляет ему параметры, включая входные значения и выполняемую операцию. В этом случае мы используем упрощенный сценарий, где у нас есть одно действие, которому мы предоставляем несколько значений. Бизнес-операция добавляет значения и выводит результат в хост-приложение.

 Рисунок 5: Простой последовательный рабочий процесс, который содержит одно действие, которое реализует калькулятор.

The workflow application is hosted in a console application as shown in the code fragment below. Workflow activities are typically coarser business activities and not as fine-grained or task-specific as shown in the example. In this case, a simplistic scenario is used to explain the programming model.

#C#
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
#endregion
namespace WFWorkflow
{
class Program
{
static void Main(string[] args)
{
using(WorkflowRuntime workflowRuntime = new WorkflowRuntime()){
AutoResetEvent waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender,
WorkflowCompletedEventArgs e) {waitHandle.Set();};
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFWorkflow.CalcWorkflow));
instance.Start();
waitHandle.WaitOne();
}
}
}
}

 

#VB.NET
#Region "Using directives
Imports System
Imports System".Collections.Generic
Imports System.Text
Imports System.Threading
Imports System.Workflow.Runtime
Imports System.Workflow.Runtime.Hosting
#End Region
Namespace WFWorkflow
Class Program
Shared Sub Main(ByVal args() As String)
WorkflowRuntime workflowRuntime = Functio
WorkflowRuntime() As Shadows
waitHandle.Set()
End Function
workflowRuntime.WorkflowTerminated Function
delegate(ByVal sender As Object, ByVal e As WorkflowTerminatedEventArgs) As +=
Console.WriteLine(e.Exception.Message)
waitHandle.Set()
End Function
Dim instance As WorkflowInstance =
workflowRuntime.CreateWorkflow(Type.GetType(WFWorkflow.CalcWorkflow))
instance.Start()
waitHandle.WaitOne()
End Sub
End Class
End Namespace

As listed above, the host process starts the workflow runtime and then starts the workflow method itself. The workflow runtime is started by instantiating the workflowruntime class. A workflow instance class is then created by passing in the workflow type to the CreateWorkflow method. The start method on the workflow instance kicks off the workflow business process.

There are several events raised by the workflow runtime environment. These include WorkflowCompleted and WorkflowTerminated. WorkflowTerminated is called when there is an error. The code fragment above uses anonymous delegates; WorkflowTerminatedEventArgs provides information on the exception that was generated. When the WorkflowCompleted event is called, we just set the waitHandle.

Workflow-Enabled Web Services

WF makes it possible to expose a workflow as a Web service. Only a workflow that uses the WebServiceReceive activity can be published as a Web service. A simple scenario would be to create a workflow project and add WebServiceReceive and WebServiceResponse activities to it. In this case, the workflow is activated by calling a method on the Web service and returns a value when the processing is complete. 

In Visual Studio, a workflow project can be published as a Web service by right-clicking a workflow project and selecting «Publish as Web service». This action will create an ASP.NET project, with ASMX and Web.Config files to host the workflow as a Web service.

Business Rules in Windows Workflow

Windows Workflow Foundation enables business rules to be captured in a Visual Designer. A system is architected so as to factor out task services. These services represent specific business activities. The visual designer in Workflow Foundation (WF) is then used to glue together various business activities to model a business process. Windows Workflow exposes business rules using two approaches:

Using conditions on activities to change their execution behavior. There are four out-of-the-box rule-based activities that use conditions:

IfElse activity that provides decision logic,
While activity that provides looping behavior,
Replicator activity that is analogous to for-each statement in code,
Conditioned activity group (CAG) which provides rich rule-driven behavior over a collection of activities.
  Custom activities can use conditions that are similar to the out-of-the-box activities.
Policy activity, which is the definition and the execution of a RuleSet. RuleSet provides priority-based forward-chaining semantics.

Conclusion

Windows Workflow Foundation requires decomposing a business process into discrete activities in order to automate it. The business process may include activities that involve both human and system touch points. WF supports long-running business processes that can run for several hours, days, or even weeks.

The WF architecture consists of activities and workflows. Activities are discrete steps used to define a business process or workflow. WF also includes WF base library, workflow runtime engine, WF designers, WF runtime services and a host process which executes the workflow. These components make WF a rich environment to implement business processes.

WF supports two built-in workflow types, sequential workflow and state machine workflow. Sequential workflows are better suited for business processes that touch systems, while state machine workflows are better suited for workflows that require human touch points. A single workflow implementation can include both sequential and state machine workflows.

References

[REF-1] «SOA with .NET», Prentice Hall/PearsonPTR, ISBN: 0131582313 (scheduled for 2010).

This article was originally published in The SOA Magazine (www.soamag.com), a publication officially associated with «The Prentice Hall Service-Oriented Computing Series from Thomas Erl» (www.soabooks.com). Copyright ©SOA Systems Inc. (www.soasystems.com)