Как я могу войти в рабочий процесс на произвольном шаге - PullRequest
1 голос
/ 09 ноября 2011

У меня есть служба рабочего процесса, которая связывает процесс Workflow Foundation 4 с базой данных приложения, в которой хранятся записи, показывающие, какой шаг должны выполнить наши пользователи.В случае невозобновляемой ошибки в рабочем процессе это сделает так, что рабочий процесс не может быть возобновлен, но записи базы данных, которые находятся в приложении, все еще существуют, поэтому существует «разъединение» между состоянием рабочего процесса инаше состояние приложения.

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

Возможно ли это сделать?Есть ли подводные камни для этого?Есть ли лучший способ управления рабочим процессом в зависимости от приложения?

Рабочий процесс будет выглядеть примерно так:

  1. Запустите рабочий процесс.Это создает запись базы данных приложения, которая отслеживает ход процесса, и запись базы данных, которая показывает пользователю, что нужно делать дальше.
  2. Пользователь «обрабатывает» шаг, который выполняет вызов службы рабочего процесса.(используя receive / sendreply), обновляя запись базы данных с результатами работы и переходя к следующему шагу в рабочем процессе.
  3. Шаг 2 повторяется со всеми различными шагами, создающими записи базы данных для обработки, затемобновление этих записей с результатами работы и создание новых записей БД для обработки до завершения процесса.

Вопрос, на который я пытаюсь ответить, заключается в том, доберется ли пользователь до определенного шага впроисходит сбой процесса и механизма рабочего процесса, так что экземпляр рабочего процесса не восстанавливается, как я могу использовать записи базы данных приложения для «перезапуска» процесса, чтобы повторно войти в процесс, пропуская до точки сбоя (при условии, что мы решили проблемучто вызвало сбой в первую очередь).Это избавит пользователя от необходимости «повторять» работу, которая уже была сделана, и останется в процессе.

Я думал, что если бы был способ просмотра записей базы данных приложения, которые были созданычтобы определить, где остановился процесс, если бы я мог «пропустить» ранее выполненные шаги и перейти к точке, в которой произошел сбой, на основе этих записей базы данных, я мог бы «возобновить» процесс (с точки зрения пользователя), не вызываяпеределок.

Ответы [ 2 ]

2 голосов
/ 29 ноября 2012

Я только начинаю с Workflow, и я смотрел несколько видео на канале 9 в MSDN, и я наткнулся на одно, которое может вам помочь. В нем говорится об использовании Закладок и некоторых Task-API от Рона Джейкобса.

Проверьте это по адресу: Workflow TV - Эпизоды рабочего процесса WF4 - API на основе задач

0 голосов
/ 10 ноября 2011

Звучит так, как будто вы хотите реализовать компенсацию, то есть пользовательские функции отката, встроенные в транзакцию. Вот начало документации по операциям и компенсациям:

http://msdn.microsoft.com/en-us/library/ee358756.aspx

Вы можете использовать действие Compensate для очистки базы данных после неудачной транзакции.

...