Основа рабочего процесса и обратная совместимость с долго работающими экземплярами

#workflow #versioning #workflow-foundation-4

#рабочий процесс #управление версиями #рабочий процесс-основа-4

Вопрос:

Недавно я присоединился к проекту, в котором Workflow Foundation 4.0 используется для моделирования бизнес-процессов.

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

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

Ответ №1:

Во-первых, XOML — это 3.0; WF4 использует обычный XAML.

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

Повторная мультиверсия:
в настоящее время я этим занимаюсь. По сути, вы должны изолировать все разные версии одного и того же рабочего процесса в пределах домена приложения. Десериализация из xaml или создание new экземпляра типа — это одно и то же — оба они приводят к загрузке сборки в текущий AppDomain. Если v1 рабочего процесса определен в сборке A.1, а v2 рабочего процесса определен в сборке A.2, могут возникнуть проблемы с привязкой, если вы не будете осторожны. Изоляция каждой версии в пределах ее собственного домена приложения помогает снизить вероятность этого.

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

Ответ №2: