Бөлісу құралы:


Особенности компонентов 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.

  • Пример корреляции, используемой для группировки сообщений, — это Request-Reply корреляция, которая объединяет сообщения вместе.

    • В активности 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 BLOB.

Блок-схема

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

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

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

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

Процедурные действия (Последовательность, Если, ForEach, Switch, Assign, DoWhile, While)

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

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

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

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

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

InvokeMethod

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

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

Сценарии использования метода InvokeMethod

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

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

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

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

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

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

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

Выбор действия

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

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

Выбор сценария

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Обнаружение в Windows Communication Foundation (WCF)

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Используется профиль по умолчанию.

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

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

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

  3. Примеры: Tracking

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

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

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

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

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

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

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