2013-11-10 5 views
0

Каков правильный процесс для обеспечения того, чтобы длительные экземпляры рабочего процесса могли быть обновлены до нового определения рабочего процесса в будущем.Обновление экземпляров рабочего процесса с использованием DynamicUpdateServices

Я знаю, что мне нужно позвонить DynamicUpdateServices.PrepareForUpdate против моего существующего XAML, прежде чем я приступлю к любым новым изменениям, чтобы позже позвонить DynamicUpdateServices.CreateUpdateMap и сгенерировать файл сопоставления, который я буду использовать для обновления существующих экземпляров Workflow.

Что мне не совсем понятно, какой файл определения рабочего процесса (XAML) следует изменить после вызова DynamicUpdateServices.PrepareForUpdate. Это (клонированный) файл XAML, который был создан после вызова DynamicUpdateServices.PrepareForUpdate. Или исходный файл XAML?

Кажется, что клонированный файл XAML должен быть очевидным выбором, но есть проблема. Клонированный файл XAML не содержит тег ViewStateManager, что означает, что вы потеряете все макеты, которые у вас есть в исходном XAML.

С другой стороны, если я использую оригинальный XAML, то как мне создать обновленную карту?

ответ

1

Я связался с MS Support и, наконец, понял, как это работает.

Мне никогда не нужно прикасаться к клонированному определению. Ключевой концепцией, которую я ранее не понимал, является то, что намерение DynamicUpdateServices.PrepareForUpdate() на самом деле не готовит файл XAML, а скорее готовит сам режим WF, чтобы он мог генерировать карту обновления, сравнивая измененный XAML с клонированной копией, которая была сгенерирована (и сохраняется в памяти, когда DynamicUpdateServices.PrepareForUpdate()) был called.So типичный процесс будет:

  1. определение Развертывание рабочих процессов (v1 xaml)
  2. Изменить определение рабочего процесса (v2 xaml)
  3. Развертывание определения рабочего процесса (v2 xaml) * также можно сделать после шага 5 вместо
  4. Вызов DynamicUpdateServices.PrepareForUpdate() против v1 xaml (получить из системы управления)
  5. Генерировать карту Update DynamicUpdateServices.CreateUpdateMap()
  6. Применить карту обновления существующих экземпляров рабочих процессов, которая сохранялась и начал с v1 xaml (WorkflowApplication.Load(instance, updateMap))

Шаг 4 и 5 должно выполняться в одном экземпляре процесса (или в большинстве случаев это просто означает на том же хосте).

+0

Я пробовал ваше решение, но оно не работает для меня. так как я не понимаю, как выполняются шаги 4 и 5, и как ваши xaml v1 и v2 связаны между собой, так как prepareForUpdate и CreateMap должны использовать тот же объект activty или Xaml, если на то пошло. иначе метод createMap завершится с ошибкой. –

+0

@ KhurramShakir. Да, это, кажется, очень сложный процесс. Я предлагаю вам проверить этот блог. http://blogs.msdn.com/b/carlos/archive/2013/11/29/dynamic-update-in-wf4-5-sample-using-a-re-hosted-workflow-designer.aspx Обсуждалось который может помочь вам. – Darnell

+0

Спасибо за ваш ответ, я ищу статью, и это кажется интересным ... Основываясь на сходстве наших первоначальных сценариев, позвольте мне объяснить, что я делаю сейчас, и вы могли бы дать мне несколько полезных советов для этого, [Изначально Я опубликовал это как ответ вашего ответа, но удален модератором.] –

Смежные вопросы