Особенности возможностей Windows Workflow Foundation

платформа .NET Framework 4 добавляет ряд функций в Windows Workflow Foundation. В этом документе описываются некоторые новые функциональные возможности и приведены подробные сведения о сценариях, в которых они могут оказаться полезными.

Действия обмена сообщениями

Действия обмена сообщениями (Receive, SendReply, Send) ReceiveReplyиспользуются для отправки и получения сообщений WCF из рабочего процесса. Receive и SendReply действия используются для формирования операции службы Windows Communication Foundation (WCF), которая предоставляется через WSDL так же, как стандартные веб-службы WCF. Send и ReceiveReply используются для использования веб-службы, аналогичной WCF ChannelFactory; также существует интерфейс добавления ссылки на службу для Workflow Foundation, который создает предварительно настроенные действия.

Приступая к работе с действиями обмена сообщениями

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

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

  • Документация по службам рабочих процессов

Пример сценария действий обмена сообщениями

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

WorkflowServiceHost

Это WorkflowServiceHost встроенный узел рабочего процесса, поддерживающий несколько экземпляров, конфигурации и обмена сообщениями WCF (хотя рабочие процессы не требуются для размещения сообщений). Он также реализует сохраняемость, отслеживание и контроль за экземплярами через набор поведений службы. Как и в WCF ServiceHost, WorkflowServiceHost он может быть размещен в локальной консоли или приложении WinForms/WPF или службе Windows или веб-размещен (в виде XAMLX-файла) в СЛУЖБАх IIS или WAS.

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

Сценарий WorkflowServiceHost

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

Корреляция

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

  • Способ группирования сообщений, т. е. связь между сообщением с запросом и ответом на него.

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

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

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

  • Примером корреляции для группирования сообщений является корреляция по схеме «запрос-ответ», группирующая сообщения.

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

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

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

    • Для любого действия обмена сообщениями щелкните свойство CorrelationInitializers и добавьте QueryCorrelationInitializer с помощью переменной CorrelationHandle, созданной ранее. Дважды щелкните нужное свойство сообщения (например, OrderID) в раскрывающемся меню. Установите свойство CorrelatesWith в значение переменной CorrelationHandle, определенной выше.
  • Концептуальная документация по корреляции

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

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

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

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

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

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

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

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

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

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

  • Опытный разработчик ASMX хочет начать использовать WCF. Однако WCF кажется слишком сложным! Что означает вся информация, которую нужно указать в файле конфигурации? В .NET 4 можно вообще не использовать файл конфигурации.

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

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

В платформа .NET Framework 3.5 в проектировании известных типов было несколько ограничений:

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

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

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

DataContractResolver решает эти проблемы в платформа .NET Framework 4.5.

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

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

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

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

Блок-схема

Блок-схема - это распространенный способ визуального представления проблем домена. Это новый стиль потока управления, который мы представляем в платформа .NET Framework 4. Основная особенность блок-схемы заключается в том, что в определенное время выполняется только одно действие. Блок-схемы могут представлять циклы и альтернативные результаты, но не могут стандартно представлять параллельное выполнение нескольких узлов.

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

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

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

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

Процедурные действия предоставляют механизм моделирования последовательного потока управления, используя знакомые программистам концепции. Эти действия позволяют традиционно структурированным конструкциям языка программирования и при необходимости обеспечивать четность языков с общими процедурными языками, такими как C# и Visual Basic.

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

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

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

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

InvokeMethod

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

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

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

  • Документация конструктора: конструктор действий InvokeMethod

Сценарии InvokeMethod

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

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

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

Действие TryCatch предоставляет механизм перехвата исключений, возникающих во время выполнения набора содержащихся действий (аналогично конструкции Try/Catch в C# и Visual Basic). TryCatch обеспечивает обработку исключений на уровне рабочего процесса. При возникновении необработанного исключения рабочий процесс прерван и блок "Наконец" не будет выполнен. Такое поведение согласуется с C#.

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

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

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

Действие Pick

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

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

Сценарий Pick

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

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

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

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

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

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

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

  1. Маршрутизация на основе содержимого (Объекты MessageFilter исследуют сообщение и определяют, куда оно должно быть отправлено.)

  2. Мост протокола (транспорт и сообщение)

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

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

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

  1. Документация. Маршрутизация

  2. Примеры: службы маршрутизации [примеры WCF]

  3. Блог: Правила маршрутизации!

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

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

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

  • Клиенты могут выполнять дополнительные операции с запросами, чтобы определить, куда их направить.

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

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

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

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

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

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

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

  2. Нерегламентированный: клиенты используют многоадресные сообщения для обнаружения служб.

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

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

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

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

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

Отслеживание рабочих процессов позволяет получить представление о выполнении экземпляра рабочего процесса. События отслеживания создаются из рабочего процесса на уровне экземпляра рабочего процесса и при выполнении действий в рабочем процессе. Участник отслеживания в рабочем процессе должен быть добавлен к узлу рабочего процесса для подписки на записи отслеживания. Записи отслеживания фильтруются с помощью профиля отслеживания. Платформа .NET Framework предоставляет участник отслеживания событий ETW (трассировка событий для Windows), а базовый профиль устанавливается в файле machine.config.

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

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

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

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

    2. Откройте средство просмотра событий и включите канал аналитики на следующем узле: Просмотр событий, журналы приложений и служб, Microsoft, Windows, Application Server-Applications. Щелкните правой кнопкой мыши "Аналитика" и выберите "Включить журнал".

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

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

  3. Примеры: отслеживание

  4. Концептуальная документация: Отслеживание рабочих процессов и трассировка

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

SqlWorkflowInstanceStore - это реализация хранилища экземпляров на основе SQL Server. Хранилище экземпляров служит для хранения состояния запущенного экземпляра вместе со всеми данными, необходимыми для загрузки и возобновления работы экземпляра. Узел службы сохраняет состояние экземпляра в хранилище экземпляров при сохранении рабочего процесса, а также загружает состояние экземпляра при получении сообщения для этого экземпляра или после истечения срока действия действий задержки.

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

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

  2. Примеры: сохраняемость

  3. Концептуальная документация: хранилище экземпляров рабочих процессов SQL.