SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Windows Workflow
Foundation
Константин Красноперов
Team lead
Артем Шумков
Разработчик
Workflow
 Библиотекакомпонент
 Описание операцийдействий в рамках процесса
 История развития:
 Версия 3.5
 Версия 4.0
 Версия 4.5
 Используется в Sharepoint
 Исходники на referencesource.microsoft.com
Что такое workflow?
 Персистеность
 SQL хранилище
 PostgreSQL
 Активности
 Bookmarks
 Обновление схем
 Транзакционность
Когда нужно использовать workflow?
 Процесс/алгоритм имеет длительный срок выполнения. (распределённый,
несколько участников)
 Требуется настройка без участия программиста
Пример
Хостинг Workflow
WorkflowServiceHost – хост для размещения службы
Workflow-сервис
• Создание новых экземпляров рабочих процессов
• Загрузка существующих экземпляров из хранилища
• Выполнение
• Персистентность
• Закладки
• Обработка входящих запросов от сервиса
(!) Обработка нескольких рабочих процессов
Хостинг Workflow
Workflow-сервис
Варианты размещения:
• Обычное управляемое .NET-приложение
• Служба Windows
• Приложение на IIS
Транспорт:
http, net.tcp, net.pipe, MSMQ
Хостинг Workflow
Workflow-сервис
Типы хостинга:
• Статический
Определение маршрута в xamlx-файле, находится в каталоге приложения
• Динамический
Определение маршрута в сторонней сборке в bin-каталоге. В каталоге
приложения svc-файл со ссылкой на определение маршрута
<%@ServiceHost
Factory="System.ServiceModel.Activation.WorkflowServiceHostFactory“
Service=“SampleService" %>
• Явный подъём хоста
Workflow в DirectumRX
Архитектура Workflow-сервиса
Route1.xaml Route2.xaml
host/workflow/Route2.svchost/workflow/Route1.svc
Workflow-сервис
/* Точка выхода */
SendReply
{
// Запрос
Request
// Ответные данные
Response: […]
}
Интеграция с WCF
/* Точка входа */
ReceiveRequest
{
// Имя контракта сервиса
ServiceContract
// Метод сервиса
Operation
// Параметры
Parameters: [...]
// Создать новый процесс ?
CanCreateInstances
}
(!) Контракт сервиса выводится автоматически на основе Receive и SendReply
Workflow-сервис
Виды корреляций (1)
Корреляция через контекст
двухсторонний протокол (например, http)
передaча через контекст (в заголовках или cookie-файлах)
• Неявная
работает автоматом в парах Receive/SendReply и
Send/ReceiveReply
• Явная
отправка и получение cвязаны через дескриптор
CorrelationHandle
Receive: RequestReplyCorrelationInitializer (handle)
SendReply (handle)
Workflow-сервис
Виды корреляций (2)
Корреляция на основе содержимого
протокол не поддерживает обмен контекстом
некоторые данные в сообщениях уникально идентифицируют нужный
экземпляр рабочего процесса
QueryCorrelationInitializer (handle, MessageQuery(k1, k2))
Receive:
CorrelatesWith (handle)
CorrelatesOn: MessageQuery(k1, k2)
Workflow-сервис
TransactedReceiveScope
{
Request:
Receive (operation, params)
Body:
…
SendReply(message)
}
Клиент-серверные транзакции
TransactionScope
{
Send (request, params)
…
ReceiveReply (request)
}
Клиент: Сервер:
Workflow-сервис
Обновление маршрутов
Old
Activity
DIFFUpdated
Activity
(1) Построение DIFF:
OldActivity;
DynamicUpdateServices.PrepareForUpdate(OldActivity);
UpdatedActivity = BuildUpdatedActivity(OldActivity);
DIFF = DynamicUpdateServices.CreateUpdateMap(updatedActivity);
Old
Activity
Updated
Activity
BuildUpdatedActivity
( )
Workflow-сервис
Обновление маршрутов
(2) Обновление экземпляров:
Instance = WorkflowApplication.GetInstance(InstanceId, Store);
wfApplication = new WorkflowApplication(UpdatedActivity, RouteName);
wfApplication.Load(Instance, DIFF);
wfApplication.Unload();
DIFFInstance
Updated
Instance
Workflow-сервис
Версионирование
Поднимаем хост как обычно:
Workflow-сервис
Версионирование
Добавляем старые версии для совместимости:
Workflow-сервис
Версионирование
• Несколько версий маршрута на одной конечной точке
• Новые экземпляры рабочих процессов стартуют по
актуальной версии, а старые экземпляры дорабатывают
по старым версиям
• Все версии имеют одинаковое имя сервиса и
уникальные номера
• Контракт всех версий должен быть одинаковым
Хостинг Workflow
• Создание новых экземпляров рабочих процессов
• Загрузка существующих экземпляров из хранилища
• Выполнение
• Персистентность
• Приостановка на закладке и возобновление
• Прекращение
• Входные и выходные параметры
• Передача параметров в закладки при возобновлении
• События жизненного цикла процесса
WorkflowApplication
Контейнер (среда выполнения) для WorkflowInstance:
(!) Только один экземпляр рабочего процесса
Workflow в DirectumRX
Разработка схем маршрутов
Workflow в DirectumRX
Разработка схем маршрутов
RouteScheme.xml
Активности:
(1) Задание/Уведомление
(2) Подзадача
(3) Условие
(4) Сценарий
(5) Мониторинг
Переходы:
1 2
2 3
3 4
3 5
(True)
(False)
Описание в виде графа
Параллельные ветки, OR/AND
Преобразование из схемы в WF-маршрут Задание
Создавать
параллельно ?
ParralelForEach (performers) ForEach (performers)
Create Assignment
CompleteAssignment
Receive
AssignmentCompleted
Event
CreateNext ?
Create Assignment
CompleteAssignment
Receive
AssignmentCompleted
Event
CreateNext =
CheckCreateNext(complete)
True False
True
Кастомные кодо-активности
// Активность для создания задания.
CreateAssignment: CodeActivity {
// Идентификатор задачи | Идентификатор исполнителя задания
InArgument<int> TaskId, PerformerId;
// Идентификатор созданного задания.
OutArgument<int> AssignmentId;
// Логика активности.
protected override void Execute(CodeActivityContext context) {
using (var session = new Session()) {
// Получаем данные из контекста.
performer = context.GetValue(this.PerformerId);
mainTask = context.GetValue(this.TaskId);
// Создаём задание.
assignment = session.Create<IAssignment>;
assignment.Performer = performer;
assignment.Status = AssignmentStatus.InProcess;
...
// Сохраняем данные в контекст.
context.SetValue(this.AssignmentId, assignment.Id);
Кастомные кодо-активности
• Хранение данных в контексте
• Доступ к закладкам
• Доступ к инфраструктуре
• Дочерние активности + операции с ними
(Schedule, Idle, Abort)
• Максимум логики в коде
Проблемы
 Есть ограничения на обновление схем workflow
 Мониторинги сделаны не оптимально
 Сломанный экземпляр просто так поднять не получится
 Сложно реализовать хранилище экземпляров workflow
Спасибо!
Остались вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...Yehor Herasymchuk
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
 
2021.11.10 Dots Platform. Serverless. Vapor
2021.11.10 Dots Platform. Serverless. Vapor2021.11.10 Dots Platform. Serverless. Vapor
2021.11.10 Dots Platform. Serverless. VaporYehor Herasymchuk
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Positive Hack Days
 
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...SQALab
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...Positive Hack Days
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Отчеты в TFS VSO  и практики аналитики
Отчеты в TFS VSO  и практики аналитикиОтчеты в TFS VSO  и практики аналитики
Отчеты в TFS VSO  и практики аналитикиАлександр Шамрай
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС2ГИС Технологии
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 

Was ist angesagt? (20)

2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 
2021.11.10 Dots Platform. Serverless. Vapor
2021.11.10 Dots Platform. Serverless. Vapor2021.11.10 Dots Platform. Serverless. Vapor
2021.11.10 Dots Platform. Serverless. Vapor
 
Управление версиями в TFS 2008
Управление версиями в TFS 2008Управление версиями в TFS 2008
Управление версиями в TFS 2008
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
 
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
Полная автоматизация развертываний ПО: общие концепции, пример реализации, ср...
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Управление версиями TFS 2010
Управление версиями TFS 2010Управление версиями TFS 2010
Управление версиями TFS 2010
 
Управление версиями в TFS 2008
Управление версиями в TFS 2008Управление версиями в TFS 2008
Управление версиями в TFS 2008
 
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...
Практические рекомендации по использованию системы TestRail | Дмитрий Рыльцов...
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Отчеты в TFS VSO  и практики аналитики
Отчеты в TFS VSO  и практики аналитикиОтчеты в TFS VSO  и практики аналитики
Отчеты в TFS VSO  и практики аналитики
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИСЭволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
Эволюция процесса деплоя в проекте — Денис Яковлев, 2ГИС
 
Jmeter
JmeterJmeter
Jmeter
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 

Ähnlich wie Meet up windows-workflow_foundation

Azure - облачные сервисы и приложения
Azure - облачные сервисы и приложенияAzure - облачные сервисы и приложения
Azure - облачные сервисы и приложенияAlexander Babich
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
Workflow Foundation
Workflow FoundationWorkflow Foundation
Workflow FoundationGetDev.NET
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Ontico
 
Azure web apps - designing and debugging
Azure web apps  - designing and debuggingAzure web apps  - designing and debugging
Azure web apps - designing and debuggingAlexey Bokov
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервереYandex
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Yulia Karpova
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Share Point Workflow
Share Point WorkflowShare Point Workflow
Share Point WorkflowMaximKo
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015Timur Safin
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев кировqasib
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 

Ähnlich wie Meet up windows-workflow_foundation (20)

Azure - облачные сервисы и приложения
Azure - облачные сервисы и приложенияAzure - облачные сервисы и приложения
Azure - облачные сервисы и приложения
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
Workflow Foundation
Workflow FoundationWorkflow Foundation
Workflow Foundation
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
Cloud APIs. Обзор API западных провайдеров и API Scalaxy (Нат Гаджибалаев)
 
Azure web apps - designing and debugging
Azure web apps  - designing and debuggingAzure web apps  - designing and debugging
Azure web apps - designing and debugging
 
PowerShell
PowerShellPowerShell
PowerShell
 
2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере2013 09 19 кеширование на клиенте и сервере
2013 09 19 кеширование на клиенте и сервере
 
Chef
ChefChef
Chef
 
Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015Rsnx tsvetkov che btrix conf 2015
Rsnx tsvetkov che btrix conf 2015
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Share Point Workflow
Share Point WorkflowShare Point Workflow
Share Point Workflow
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 

Meet up windows-workflow_foundation

  • 1. Windows Workflow Foundation Константин Красноперов Team lead Артем Шумков Разработчик
  • 2. Workflow  Библиотекакомпонент  Описание операцийдействий в рамках процесса  История развития:  Версия 3.5  Версия 4.0  Версия 4.5  Используется в Sharepoint  Исходники на referencesource.microsoft.com
  • 3. Что такое workflow?  Персистеность  SQL хранилище  PostgreSQL  Активности  Bookmarks  Обновление схем  Транзакционность
  • 4. Когда нужно использовать workflow?  Процесс/алгоритм имеет длительный срок выполнения. (распределённый, несколько участников)  Требуется настройка без участия программиста
  • 6. Хостинг Workflow WorkflowServiceHost – хост для размещения службы Workflow-сервис • Создание новых экземпляров рабочих процессов • Загрузка существующих экземпляров из хранилища • Выполнение • Персистентность • Закладки • Обработка входящих запросов от сервиса (!) Обработка нескольких рабочих процессов
  • 7. Хостинг Workflow Workflow-сервис Варианты размещения: • Обычное управляемое .NET-приложение • Служба Windows • Приложение на IIS Транспорт: http, net.tcp, net.pipe, MSMQ
  • 8. Хостинг Workflow Workflow-сервис Типы хостинга: • Статический Определение маршрута в xamlx-файле, находится в каталоге приложения • Динамический Определение маршрута в сторонней сборке в bin-каталоге. В каталоге приложения svc-файл со ссылкой на определение маршрута <%@ServiceHost Factory="System.ServiceModel.Activation.WorkflowServiceHostFactory“ Service=“SampleService" %> • Явный подъём хоста
  • 9. Workflow в DirectumRX Архитектура Workflow-сервиса Route1.xaml Route2.xaml host/workflow/Route2.svchost/workflow/Route1.svc
  • 10. Workflow-сервис /* Точка выхода */ SendReply { // Запрос Request // Ответные данные Response: […] } Интеграция с WCF /* Точка входа */ ReceiveRequest { // Имя контракта сервиса ServiceContract // Метод сервиса Operation // Параметры Parameters: [...] // Создать новый процесс ? CanCreateInstances } (!) Контракт сервиса выводится автоматически на основе Receive и SendReply
  • 11. Workflow-сервис Виды корреляций (1) Корреляция через контекст двухсторонний протокол (например, http) передaча через контекст (в заголовках или cookie-файлах) • Неявная работает автоматом в парах Receive/SendReply и Send/ReceiveReply • Явная отправка и получение cвязаны через дескриптор CorrelationHandle Receive: RequestReplyCorrelationInitializer (handle) SendReply (handle)
  • 12. Workflow-сервис Виды корреляций (2) Корреляция на основе содержимого протокол не поддерживает обмен контекстом некоторые данные в сообщениях уникально идентифицируют нужный экземпляр рабочего процесса QueryCorrelationInitializer (handle, MessageQuery(k1, k2)) Receive: CorrelatesWith (handle) CorrelatesOn: MessageQuery(k1, k2)
  • 13. Workflow-сервис TransactedReceiveScope { Request: Receive (operation, params) Body: … SendReply(message) } Клиент-серверные транзакции TransactionScope { Send (request, params) … ReceiveReply (request) } Клиент: Сервер:
  • 14. Workflow-сервис Обновление маршрутов Old Activity DIFFUpdated Activity (1) Построение DIFF: OldActivity; DynamicUpdateServices.PrepareForUpdate(OldActivity); UpdatedActivity = BuildUpdatedActivity(OldActivity); DIFF = DynamicUpdateServices.CreateUpdateMap(updatedActivity); Old Activity Updated Activity BuildUpdatedActivity ( )
  • 15. Workflow-сервис Обновление маршрутов (2) Обновление экземпляров: Instance = WorkflowApplication.GetInstance(InstanceId, Store); wfApplication = new WorkflowApplication(UpdatedActivity, RouteName); wfApplication.Load(Instance, DIFF); wfApplication.Unload(); DIFFInstance Updated Instance
  • 18. Workflow-сервис Версионирование • Несколько версий маршрута на одной конечной точке • Новые экземпляры рабочих процессов стартуют по актуальной версии, а старые экземпляры дорабатывают по старым версиям • Все версии имеют одинаковое имя сервиса и уникальные номера • Контракт всех версий должен быть одинаковым
  • 19. Хостинг Workflow • Создание новых экземпляров рабочих процессов • Загрузка существующих экземпляров из хранилища • Выполнение • Персистентность • Приостановка на закладке и возобновление • Прекращение • Входные и выходные параметры • Передача параметров в закладки при возобновлении • События жизненного цикла процесса WorkflowApplication Контейнер (среда выполнения) для WorkflowInstance: (!) Только один экземпляр рабочего процесса
  • 22. Workflow в DirectumRX Разработка схем маршрутов RouteScheme.xml Активности: (1) Задание/Уведомление (2) Подзадача (3) Условие (4) Сценарий (5) Мониторинг Переходы: 1 2 2 3 3 4 3 5 (True) (False) Описание в виде графа Параллельные ветки, OR/AND
  • 23. Преобразование из схемы в WF-маршрут Задание Создавать параллельно ? ParralelForEach (performers) ForEach (performers) Create Assignment CompleteAssignment Receive AssignmentCompleted Event CreateNext ? Create Assignment CompleteAssignment Receive AssignmentCompleted Event CreateNext = CheckCreateNext(complete) True False True
  • 24. Кастомные кодо-активности // Активность для создания задания. CreateAssignment: CodeActivity { // Идентификатор задачи | Идентификатор исполнителя задания InArgument<int> TaskId, PerformerId; // Идентификатор созданного задания. OutArgument<int> AssignmentId; // Логика активности. protected override void Execute(CodeActivityContext context) { using (var session = new Session()) { // Получаем данные из контекста. performer = context.GetValue(this.PerformerId); mainTask = context.GetValue(this.TaskId); // Создаём задание. assignment = session.Create<IAssignment>; assignment.Performer = performer; assignment.Status = AssignmentStatus.InProcess; ... // Сохраняем данные в контекст. context.SetValue(this.AssignmentId, assignment.Id);
  • 25. Кастомные кодо-активности • Хранение данных в контексте • Доступ к закладкам • Доступ к инфраструктуре • Дочерние активности + операции с ними (Schedule, Idle, Abort) • Максимум логики в коде
  • 26. Проблемы  Есть ограничения на обновление схем workflow  Мониторинги сделаны не оптимально  Сломанный экземпляр просто так поднять не получится  Сложно реализовать хранилище экземпляров workflow