#serialization #workflow #versioning #workflow-foundation
Вопрос:
У меня простой бизнес-процесс со следующими условиями
- Пользователям необходимо изменить сам рабочий процесс с помощью средства настройки
- Рабочий процесс-это длительный рабочий процесс промывки, поэтому он будет сериализован
Есть ли способ автоматизировать задачу управления версиями различных сборок рабочих процессов?
Ответ №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 где найти подходящую сборку.