Сериализация рабочих процессов с версиями с помощью Microsoft WF

#serialization #workflow #versioning #workflow-foundation

Вопрос:

У меня простой бизнес-процесс со следующими условиями

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

Есть ли способ автоматизировать задачу управления версиями различных сборок рабочих процессов?

Ответ №1:

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

Ответ №2:

Вы можете повторно разместить конструктор WF в своем собственном приложении, чтобы конечные пользователи могли изменять рабочие процессы. Поскольку вы принимаете дизайнера, вы в значительной степени контролируете, что он может сделать. Например, вы можете запретить им удалять или отключать действия и разрешать им добавлять только определенные новые действия в предопределенных областях рабочего процесса. Лучший подход-сохранить эти рабочие процессы в виде файлов XOML и запустить их как таковые. Это означает, что вы не можете добавить код в сам рабочий процесс, но вы можете определить базовый класс рабочего процесса, производный от SequentialWorkflowActivity (или эквивалент состояния), и использовать его в качестве базового класса рабочего процесса. Это позволяет добавлять код и свойства. Например, вы все еще можете добавить активность кода, но вам нужно связать ее с кодом в базовом классе.

Сериализация рабочих процессов, или обезвоживание, как это называется, используется с запущенными рабочими процессами для их сохранения на диске. Это использует стандартную двоичную сериализацию .NET и может быть сложным, но сложным из-за длительного характера рабочих процессов. Но ничего страшного, если знаешь, что искать. См. http://msmvps.com/blogs/theproblemsolver/archive/2008/09/10/versioning-long-running-workfows.aspx для начала серии сообщений в блоге.

Не уверен, что вам это нужно, но есть также возможность изменять уже выполняемые рабочие процессы. При этом используется объект WorkflowChanges. Смотрите здесь http://wiki.windowsworkflowfoundation.eu/default.aspx/WF/RuntimeModificationOfWorkflows.html для получения более подробной информации.

Комментарии:

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

Ответ №3:

Вот еще одна статья об управлении версиями рабочих процессов:

http://www.adefwebserver.com/DotNetNukeHELP/Workflow/VacationRequest3.htm

В основном вы можете версировать рабочие процессы, использующие сборки, если:

  • Любая сборка, используемая с рабочими процессами, должна иметь строгое имя.
  • Если сборка использует интерфейс, она также должна иметь строгое имя и помещаться в отдельную сборку.
  • Запись в файле web.config может давать инструкции asp.net где найти подходящую сборку.