Windows Workflow Foundation Константин Красноперов Team lead Артем

Скачать презентацию Windows Workflow Foundation Константин Красноперов Team lead Артем Скачать презентацию Windows Workflow Foundation Константин Красноперов Team lead Артем

meet-up_windows_workflow_foundation.pptx

  • Размер: 503.8 Кб
  • Автор:
  • Количество слайдов: 27

Описание презентации Windows Workflow Foundation Константин Красноперов Team lead Артем по слайдам

Windows Workflow Foundation Константин Красноперов Team lead Артем Шумков Разработчик    Windows Workflow Foundation Константин Красноперов Team lead Артем Шумков Разработчик

Workflow Библиотека\компонент Описание операций\действий в рамках процесса История развития:  Версия 3. 5 ВерсияWorkflow Библиотека\компонент Описание операций\действий в рамках процесса История развития: Версия 3. 5 Версия 4. 0 Версия 4. 5 Используется в Sharepoint Исходники на referencesource. microsoft. com

Что такое workflow?  Персистеность SQL хранилище Postgre. SQL Активности Bookmarks Обновление схем ТранзакционностьЧто такое workflow? Персистеность SQL хранилище Postgre. SQL Активности Bookmarks Обновление схем Транзакционность

Когда нужно использовать workflow?  Процесс/алгоритм имеет длительный срок выполнения.  (распределённый, несколько участников)Когда нужно использовать workflow? Процесс/алгоритм имеет длительный срок выполнения. (распределённый, несколько участников) Требуется настройка без участия программиста

Пример    Пример

Хостинг Workflow. Service. Host  – хост для размещения службы. Workflow-сервис • Создание новыхХостинг Workflow. Service. Host – хост для размещения службы. Workflow-сервис • Создание новых экземпляров рабочих процессов • Загрузка существующих экземпляров из хранилища • Выполнение • Персистентность • Закладки • Обработка входящих запросов от сервиса(!) Обработка нескольких рабочих процессов

Хостинг Workflow-сервис Варианты размещения:  • Обычное управляемое. NET-приложение • Служба Windows • ПриложениеХостинг Workflow-сервис Варианты размещения: • Обычное управляемое. NET-приложение • Служба Windows • Приложение на IIS Транспорт: http, net. tcp, net. pipe, MSMQ

Хостинг Workflow-сервис Типы хостинга:  • Статический Определение маршрута в xamlx-файле, находится в каталогеХостинг Workflow-сервис Типы хостинга: • Статический Определение маршрута в xamlx-файле, находится в каталоге приложения • Динамический Определение маршрута в сторонней сборке в bin-каталоге. В каталоге приложения svc-файл со ссылкой на определение маршрута • Явный подъём хоста

Workflow в Directum. RX Архитектура Workflow-сервиса Route 1. xaml Route 2. xaml host/workflow/Route 2.Workflow в Directum. RX Архитектура Workflow-сервиса Route 1. xaml Route 2. xaml host/workflow/Route 2. svc host/workflow/Route 1. svc

Workflow-сервис /* Точка выхода */ Send. Reply {  // Запрос Request // ОтветныеWorkflow-сервис /* Точка выхода */ Send. Reply { // Запрос Request // Ответные данные Response: […] } Интеграция с WCF /* Точка входа */ Receive. Request { // Имя контракта сервиса Service. Contract // Метод сервиса Operation // Параметры Parameters: [. . . ] // Создать новый процесс ? Can. Create. Instances } (!) Контракт сервиса выводится автоматически на основе Receive и Send. Reply

Workflow-сервис Виды корреляций (1) Корреляция через контекст  двухсторонний протокол (например, http)  передaчаWorkflow-сервис Виды корреляций (1) Корреляция через контекст двухсторонний протокол (например, http) передaча через контекст (в заголовках или cookie-файлах) • Неявная работает автоматом в парах Receive/Send. Reply и Send/Receive. Reply • Явная отправка и получение cвязаны через дескриптор Correlation. Handle Receive : Request. Reply. Correlation. Initializer (handle) Send. Reply (handle)

Workflow-сервис Виды корреляций (2) Корреляция на основе содержимого  протокол не поддерживает обмен контекстомWorkflow-сервис Виды корреляций (2) Корреляция на основе содержимого протокол не поддерживает обмен контекстом некоторые данные в сообщениях уникально идентифицируют нужный экземпляр рабочего процесса Query. Correlation. Initializer (handle, Message. Query(k 1, k 2)) Receive : Correlates. With (handle) Correlates. On: Message. Query(k 1, k 2)

Workflow-сервис Transacted. Receive. Scope {  Request :  Receive ( operation , Workflow-сервис Transacted. Receive. Scope { Request : Receive ( operation , params ) Body : … Send. Reply ( message ) } Клиент-серверные транзакции Transaction. Scope { Send ( request , params ) … Receive. Reply ( request ) } Клиент : Сервер :

Workflow-сервис Обновление маршрутов Old Activity DIFFUpdated Activity(1) Построение DIFF: Old. Activity; Dynamic. Update. Services.Workflow-сервис Обновление маршрутов Old Activity DIFFUpdated Activity(1) Построение DIFF: Old. Activity; Dynamic. Update. Services. Prepare. For. Update(Old. Activity); Updated. Activity = Build. Updated. Activity(Old. Activity); DIFF = Dynamic. Update. Services. Create. Update. Map(updated. Activity); Old Activity Updated Activity. Build. Updated. Activit y ( )

Workflow-сервис Обновление маршрутов (2) Обновление экземпляров: Instance = Workflow. Application. Get. Instance(Instance. Id, Store);Workflow-сервис Обновление маршрутов (2) Обновление экземпляров: Instance = Workflow. Application. Get. Instance(Instance. Id, Store); wf. Application = new Workflow. Application (Updated. Activity, Route. Name); wf. Application. Load(Instance, DIFF); wf. Application. Unload(); DIFFInstance Updated Instance

Workflow-сервис Версионирование Поднимаем хост как обычно:    Workflow-сервис Версионирование Поднимаем хост как обычно:

Workflow-сервис Версионирование Добавляем старые версии для совместимости:    Workflow-сервис Версионирование Добавляем старые версии для совместимости:

Workflow-сервис Версионирование • Несколько версий маршрута на одной конечной точке • Новые экземпляры рабочихWorkflow-сервис Версионирование • Несколько версий маршрута на одной конечной точке • Новые экземпляры рабочих процессов стартуют по актуальной версии, а старые экземпляры дорабатывают по старым версиям • Все версии имеют одинаковое имя сервиса и уникальные номера • Контракт всех версий должен быть одинаковым

Хостинг Workflow • Создание новых экземпляров рабочих процессов • Загрузка существующих экземпляров из хранилищаХостинг Workflow • Создание новых экземпляров рабочих процессов • Загрузка существующих экземпляров из хранилища • Выполнение • Персистентность • Приостановка на закладке и возобновление • Прекращение • Входные и выходные параметры • Передача параметров в закладки при возобновлении • События жизненного цикла процесса. Workflow. Application Контейнер (среда выполнения) для Workflow. Instance : (!) Только один экземпляр рабочего процесса

Workflow в Directum. RX    Workflow в Directum. RX

Разработка схем маршрутов    Разработка схем маршрутов

Workflow в Directum. RX Разработка схем маршрутов Route. Scheme. xml Активности:  (1) Задание/УведомлениеWorkflow в Directum. RX Разработка схем маршрутов Route. Scheme. xml Активности: (1) Задание/Уведомление (2) Подзадача (3) Условие (4) Сценарий (5) Мониторинг Переходы: 1 2 2 3 3 4 3 5 (True) (False)Описание в виде графа Параллельные ветки, OR/AN

Преобразование из схемы в WF-маршрут Задание    Преобразование из схемы в WF-маршрут Задание

Кастомные кодо-активности  // Активность для создания задания. Create. Assignment :  Code. ActivityКастомные кодо-активности // Активность для создания задания. Create. Assignment : Code. Activity { // Идентификатор задачи | Идентификатор исполнителя задания In. Argument Task. Id, Performer. Id; // Идентификатор созданного задания. Out. Argument Assignment. Id; // Логика активности. protected override void Execute( Code. Activity. Context context) { using ( var session = new Session ()) { // Получаем данные из контекста. performer = context. Get. Value( this. Performer. Id); main. Task = context. Get. Value( this. Task. Id); // Создаём задание. assignment = session. Create; assignment. Performer = performer; assignment. Status = Assignment. Status. In. Process; . . . // Сохраняем данные в контекст. context. Set. Value( this. Assignment. Id, assignment. Id); } } }

Кастомные кодо-активности • Хранение данных в контексте • Доступ к закладкам • Доступ кКастомные кодо-активности • Хранение данных в контексте • Доступ к закладкам • Доступ к инфраструктуре • Дочерние активности + операции с ними ( Schedule, Idle, Abort ) • Максимум логики в коде

Проблемы Есть ограничения на обновление схем workflow Мониторинги сделаны не оптимально Сломанный экземпляр простоПроблемы Есть ограничения на обновление схем workflow Мониторинги сделаны не оптимально Сломанный экземпляр просто так поднять не получится Сложно реализовать хранилище экземпляров workflow

Спасибо! Остались вопросы?    Спасибо! Остались вопросы?