Windows workflow foundation что это

Обновлено: 17.05.2024

в Visual Studio 2012 создайте проект приложения службы рабочего процесса WCF. На полотне будут расположены Receive и SendReply.

Щелкните проект правой кнопкой мыши и выберите Добавление ссылки на службу. Укажите существующий язык WSDL веб-службы и нажмите кнопку ОК. Создайте проект, чтобы отобразить созданные действия (реализованные с помощью Send и ReceiveReply ) на панели элементов.

Служба маршрутизации WCF

Обработка ошибок была сложной задачей, так как эта логика должна была быть жестко закодирована в клиенте.

Клиенты и службы должны были всегда использовать одни и те же привязки.

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

Обработка ошибок (маршрутизатор перехватывает исключения и при возникновении сбоя переходит к резервным конечным точкам)

Динамическое (в памяти) обновление MessageFilterTable<TFilterData> и конфигурации маршрутизации.

Приступая к работе

Сценарии маршрутизации

Служба маршрутизации полезна в следующих сценариях.

Клиенты могут работать с несколькими службами, не обращаясь к ним непосредственно.

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

Клиенты и службы могут согласовать различные привязки с различными параметрами безопасности.

Клиенты могут быть более устойчивыми к сбоям или недоступности служб.

Хранилище экземпляров рабочих процессов SQL

Приступая к работе

в Visual Studio 2012 создайте рабочий процесс, содержащий неявное или неявное Persist действие. Добавьте поведение SqlWorkflowInstanceStore на узел службы рабочего процесса. Это можно сделать в коде или в файле конфигурации приложения.

Действие Pick

Действие Pick обеспечивает моделирование потока управления на основе событий в WF. Класс Pick содержит множество ветвей, каждая из которых перед выполнением ожидает наступления конкретного события. В такой конфигурации действие Pick ведет себя подобно Switch<T>, в котором действие выполнено только для одного события из набора прослушиваемых событий. Всеми ветвями управляют события, и появившееся событие запускает соответствующую ветвь. Все другие ветви отменяются и прекращают ожидать передачу данных, связанных с событиями.

Начало работы

в Visual Studio 2012 создайте консольное приложение рабочего процесса. В конструкторе рабочих процессов добавьте действие Pick.

Сценарий Pick

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

Процедурные действия (Sequence, If, ForEach, Switch, Assign, DoWhile, While)

Приступая к работе

в Visual Studio 2012 создайте консольное приложение рабочего процесса. Добавьте в конструкторе рабочих процессов процедурные действия.

Документация по конструктору:

Сценарии процедурных действий

Parallel: В системе управления документами интрасети есть рабочий процесс утверждения документов. Документы перед публикацией в интрасети должны утверждаться сотрудниками нескольких отделов. Не установлен порядок для утверждений. они могут происходить в любое время, когда документ находится на этапе «ожидается утверждение». Когда пользователь отправляет документ для проверки, он должен быть одобрен его прямым менеджером, администратором интрасети и диспетчером внутренней связи.

ParallelForEach<T>: приложение WF управляет корпоративными закупками в большой компании. Корпоративные правила предписывают перед планированием каждой операции закупки произвести оценку трех разных поставщиков. Сотрудник из отдела покупателя выбирает трех поставщиков из списка поставщиков компании. После того как эти поставщики выбраны и проинформированы, компания ожидает от них коммерческих предложений. Предложения могут поступить в любом порядке. Чтобы реализовать этот сценарий в WF, выполните действие ParallelForEach<T> для всех поставщиков в коллекции, запросив от них коммерческие предложения. После того как все предложения собраны, выбирается и отображается лучшее из них.

WorkflowServiceHost

Приступая к работе со службой рабочего процесса

в Visual Studio 2010 создайте проект приложения службы рабочего процесса WCF: этот проект будет настроен для использования WorkflowServiceHost в среде веб-узла.

Экземплярами рабочих процессов можно управлять (приостанавливать или завершать их работу). Это делается путем добавления WorkflowControlEndpoint в WorkflowServiceHost с последующим вызовом WorkflowControlClient.

Образцы WorkflowServiceHost приведены в следующих разделах:

Сценарий WorkflowServiceHost

Windows Workflow Foundation – для чего и в каких случаях применять

Помню, еще в университете перед реализацией любого алгоритма мы описывали его в виде блок схемы, и только после этого переходили непосредственно к кодированию. Workflow, как одна из парадигм программирования, на ряду с процедурным и объектно ориентированным подходами, как раз и позволяет нам визуально реализовать любой процесс, используя набор предопределенных функциональных блоков (Activity), при этом, избавляя от его последующего кодирования.

Библиотека WF, являясь одной из реализаций парадигмы Workflow, предоставляет следующие основные возможности:

— богатый набор функциональных блоков;
— расширение набора стандартных функциональных блоков пользовательскими;
— сохранение и возобновление экземпляров Workflow в процессе их исполнения;
— использование Workflow дизайнера в вашем приложении;
— интеграция с WCF;
— пошаговая диагностика непосредственно в Workflow дизайнере;
— и многое другое.

Критерии применения

Как известно, каждой технологии своя область применения. Для определения необходимости использования WF при реализации конкретного алгоритма/процесса я применяю 3 критерия:

1. Реализация алгоритма/процесса постоянно меняется.

В нашей компании мы разработали подсистему Workflow, которая является ядром всех продуктов. Имея, к примеру, десятки клиентов наших продуктов, у которых десятки процессов, получаем сотни разных изменяющихся процессов.

2. Процесс/алгоритм имеет длительный срок выполнения.

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

3. Нужно предоставить возможность изменения алгоритма/процесса конечному пользователю без вмешательства программиста.

Мы разработали свой собственный дизайнер, чтобы максимально упростить и облегчить редактирование процессов конечному пользователю (бизнес-аналитику). Это позволяет снять нагрузку с разработчиков. А возможность видеть и самим с легкостью менять свои процессы очень привлекательна для клиентов.

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

Ознакомительный пример

В качестве ознакомительного примера использования WF я как раз и реализую Workflow процесс, который ответит на вопрос о целесообразности использования WF.
1. Создаю новый проект IsWWFUsefullSample используя шаблон Blank Solution:


2. Добавляю новый проект IsWWFUsefullSample.Activities используя шаблон Activity Designer Library:


3. Удаляю сущеcтвующий файл ActivityDesigner1.xaml и добавляю новый элемент используя шаблон Activity:


4. Открываю Activity в дизайнере и добавляю необходимые параметры типа Boolean:

— три входящих параметра соответствующих нашим критериям: IsLongRunning, IsChangeable, IsDesignerNecessary;

— один исходящий параметр для возврата результата: Result.


5. Для анализа входящих праметров использую три вложенных If Activities (Toolbox -> Control Flow -> If), хотя конечно можно обойтись и одним. Для присвоения результата использую Assign Activity (Toolbox -> Primitives -> Assign). В итоге получается следующий алгоритм:


6. Workflow процесс готов. Для его использования добавляю новое приложение IsWWFUsefullSample.TestClient на основании шаблона Workflow Console Application:



7. Удаляю файл Workflow1.xaml.

8. Добавляю ссылку на проект IsWWFUsefullSample.Activities.


9. Реализую Main метод. Он предлагает пользователю ответить на три вопроса, запускает процесс Workflow с полученными исходными данными и выводит результат вычисления.

namespace IsWWFUsefullSample.TestClient
using System;
using System.Activities;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/// <summary>
/// Console program class.
/// </summary>
public class Program
/// <summary>
/// Program starting point.
/// </summary>
/// <param name="args">Program parameters.</param>
public static void Main(string[] args)
// Question answers
const string Yes = "yes";
const string No = "no";
var answers = new List<string> < Yes, No >;

// Create new activity instance
var activity = new IsWWFUsefull();
var parameters = new Dictionary<string, object>();

do
Console.WriteLine("Please, answer following questions to determine necessity of using WWF.");
Console.WriteLine();

// Read activity input parameters
parameters["IsLongRunning"] = ReadAnswer("Is process/algorithm long running?", answers) == Yes;
parameters["IsChangeable"] = ReadAnswer("Is process/algorithm frequently changed?", answers) == Yes;
parameters["IsDesignerNecessary"] =
ReadAnswer("Do you need a visual designer for your process/algorithm?", answers) == Yes;

Обнаружение WCF

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

Продукт создается по стандарту WS-Discovery. Она разработана как взаимодействующая, расширяемая и универсальная. Продукт поддерживает два режима функционирования.

Управляемый: в сети имеется сущность, осведомленная о существующих службах; клиенты направляют запросы непосредственно к ней. Такая схема работы аналогична Active Directory.

Начало работы

Сценарии обнаружения

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

Блок-схема

Приступая к работе

в Visual Studio 2012 создайте консольное приложение рабочего процесса. В конструкторе рабочих процессов добавьте блок-схему.

В блок-схеме используются следующие классы:

Документация по конструктору:

Сценарии блок-схем

Действие блок-схемы можно использовать для реализации игры по угадыванию числа. Эта игра очень проста: компьютер выбирает случайное число, а игрок должен его угадать. Когда игрок отправляет каждое предположение, компьютер показывает их подсказку (т. е. "попробуйте меньшее число"). Если игрок находит число в течение менее 7 попыток, он получает от компьютера Специальный конгратулатион. Эта игра может быть реализована с помощью сочетания следующих процедурных действий:

Корреляция

Корреляцией называют два следующих явления:

Способ сопоставления порции данных с экземпляром службы.

Начало работы

Чтобы начать работу с корреляцией, создайте новый проект в Visual Studio. Создайте переменную типа CorrelationHandle.

В Receive действии щелкните CorrelationInitializers свойство и добавьте RequestReplyCorrelationInitializer с помощью коррелатионхандле, созданного на первом шаге выше.

Создайте SendReply действие, щелкнув правой кнопкой мыши Receive и выбрав команду "Создать SendReply". Вставьте его в рабочий процесс после действия Receive.

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

Сценарий корреляции

Обзор Windows Workflow Foundation на примере построения системы электронного документооборота [Часть 1]

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

Таким образом, в конечном итоге создание потока работ обычно сводится к составлению в дизайнере блок-схемы на основе Активностей базовой библиотеки в сочетании с Активностями собственной разработки. Поток работ, построенный в дизайнере, кодируется на языке XAML (расширение XML). Внешний вид дизайнера представлен на рисунке.




“Хорошо, но для чего это мне? — спросите вы. — Я лучше напишу килограмм кода, чем буду копаться с блоками и стрелками”.

Действительно, не с этого стоило начинать. Мы, разработчики, привыкли писать и читать код, хорошо это делаем и любим это делать. Код — компактнее. В коде мы можем оставлять комментарии. Изменения в коде легче отслеживать в системе контроля версий. Можно придумать еще 100500 аргументов, наверное. Но, оказывается, технология WF обладает следующими замечательными свойствами.

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




Сейчас принято разделять логику на независимые участки кода. В частности, и для того, чтоб обеспечить масштабируемость. Для примера рассмотрим два метода: LogOn и GetData. Пока очевидно, что вначале вызывается метод LogOn, за ним — GetData. Но когда таких методов становится много, нам бывает сложно разобраться в логике (она может быть “размазана” по всему приложению) и порядке их выполнения. Использование WF снимает данную проблему: мы имеем разделенные задачи, которые связывает нить общего потока работ, отображаемого в виде простой для понимания блок-схемы, что даже неопытный разработчик сможет быстро разобраться в правилах запуска.

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

Когда к нам в команду поступила задача реализовать User Store типа: “Как директор, я хочу, чтобы в системе заявления на отпуск сотрудников согласовывались у непосредственного руководителя, затем поступали в отдел кадров для составления приказа, а приказ, после моей подписи, уходил бухгалтерию для начисления отпускных, чтобы исключить ошибки и задержки, уменьшить затраты”, — оказалось, что технология WF идеально подходит для ее реализации. При этом могут быть использованы все описанные выше возможности.

В следующей части рассмотрим практическую иллюстрацию применения WF на данном примере.

Упрощенная конфигурация

Устранена необходимость явной настройки каждой службы отдельно. Если вы не настроили какие-либо <service> элементы для службы, и ваша служба не определяет программно любую конечную точку, в службу будет автоматически добавлен набор конечных точек, по одному для каждого базового адреса службы и по контракту, реализованному службой.

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

Стандартные конечные точки определяют повторно используемые, заранее настроенные конечные точки, имеющие фиксированные значения для одного или нескольких свойств (адрес, привязка и контракт), а также позволяют определить пользовательские свойства.

Наконец, ConfigurationChannelFactory<TChannel> позволяет централизованно управлять конфигурацией клиента WCF, что полезно в сценариях, в которых конфигурация выбирается или изменяется после времени загрузки домена приложения.

Приступая к работе

Сценарии упрощенной конфигурации

Существующий набор служб WCF очень сложно настраивать и обслуживать. Файл конфигурации содержит тысячи строк XML-кода, которые очень опасно трогать. Потребуется помощь, чтобы уменьшить объем кода и сделать его более управляемым.

Действия по обработке ошибок

Приступая к работе

в Visual Studio 2012 создайте консольное приложение рабочего процесса. В конструкторе рабочих процессов добавьте действие TryCatch.

Сценарии обработки ошибок

При возникновении ошибки должен быть выполнен набор действий и определенная логика. Если логика обработки ошибок обнаружила, что ошибку устранить нельзя, то исключение будет выдано повторно и проблема будет обрабатываться родительским действием (или узлом).

в этом разделе

руководство по документации по рабочему процессу Windows
Список тем для ознакомления с учетом степени подготовленности (от новичка до хорошо ознакомленного с предметом разработчика) и требований.

новые возможности Windows Workflow Foundation
Описываются изменения некоторых парадигм разработки по сравнению с предыдущими версиями.

Windows Обзор концепции рабочего процесса
набор разделов, в которых обсуждаются более крупные понятия Windows Workflow Foundation.

Учебник по начало работы
набор пошаговых руководств, посвященных программированию Windows Workflow Foundation приложений.

Windows Программирование Workflow Foundation
Набор разделов учебника, которые следует понимать, чтобы стать хорошо знакомым программистам WF.

расширение Windows Workflow Foundation
набор разделов, в которых обсуждается расширение или настройка Windows Workflow Foundation в соответствии со своими потребностями.

Windows Примеры рабочих процессов
Содержит образцы приложений, демонстрирующих функции и сценарии WF.

Windows Workflow Foundation

в этом разделе описывается модель программирования, примеры и средства Windows Workflow Foundation (WF).

Арбитр контрактов данных

Было невозможно динамически добавлять известные типы во время сериализации и десериализации.

Сериализаторы не могли работать с неизвестными данными в xsi:type.

Пользователи не смогли указать xsi:type, который должен появиться в канале, например уменьшить размер экземпляра сериализации в канале.

Приступая к работе

Сценарии арбитра контрактов данных

Как избежать необходимости объявлять десятки объектов KnownTypeAttribute в службе.

Уменьшение размера большого двоичного объекта XML.

InvokeMethod

Действие InvokeMethod позволяет вызывать открытые методы для объектов или типов в области. Оно поддерживает вызов методов экземпляров и статических методов с параметрами или без параметров (включая массивы параметров) и универсальных методов. Оно также позволяет выполнять метод синхронно и асинхронно.

Приступая к работе

в Visual Studio 2012 создайте консольное приложение рабочего процесса. Добавьте действие InvokeMethod в конструкторе рабочих процессов и настройте для него метод экземпляра и статический метод.

Сценарии InvokeMethod

Необходимо вызвать метод для объекта в области. Например, в словарь необходимо добавить значение. Вызывается метод Add для экземпляра словаря, указываются ключ и значение.

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

Отслеживание

Начало работы

В Visual Studio 2010 создайте новый проект служебного приложения рабочего процесса WCF. Пара Receive и SendReply будет расположена на полотне для запуска.

Откройте файл web.config и добавьте поведение отслеживания трассировки событий Windows без профиля.

Будет использован профиль по умолчанию.

откройте средство просмотра событий и включите канал аналитики на следующем узле: Просмотр событий, журналы приложений и служб, Microsoft, Windows, сервер приложений — приложения. Щелкните правой кнопкой мыши аналитика и выберите Включить журнал.

Запустите службу рабочего процесса.

Просмотрите события отслеживания рабочего процесса в средстве просмотра событий.

Читайте также: