У меня есть набор пользовательских действий, которые используются в сложных рабочих процессах.Сохранение последовательности операций и закладки в качестве перебора рабочих процессов
Я бы хотел, чтобы они (пользовательские действия) сохранялись, не имея рабочего процесса в незанятом состоянии. Она должна быть такой системы отказоустойчивой, так что всякий раз, когда что-то пойдет не так во время выполнения рабочего процесса может быть:
- остановился пользователем (в любое время) и возобновлено позже из закладки/точки она была приостановлена (для например, пользователь заметил, что внешняя система отключена, и он хочет приостановить рабочий процесс на время).
- в случае необработанного исключения мы можем перезапустить выполнение с последней закладкой/момента времени
- остановка WorkflowApplication хоста может произойти в любое время и мы можем перезапустить выполнение из последней закладки/момента времени
Я я работал в течение нескольких дней с упорством рабочего процесса, но я не уверен, смогу ли я достичь своей цели. Зачем?
- Я мог бы использовать блокирующие закладки в каждом пользовательском действии, но блокирование рабочего процесса и перезапуск его только с целью его сохранения не выглядит многообещающим.
- Я мог бы использовать неблокирующие закладки, но я не смог их увидеть в базе данных и возобновить его.
Можете ли вы, пожалуйста, посоветовать мне, это заводы рабочего процесса - это путь сюда?
Я вижу некоторый свет в незаблокированных закладок, но я не могу их удержать и возобновить позже. Не могли бы вы дать мне несколько советов о том, как сохранить неблокирующую закладку для последующего возобновления?
Edit:
В WF3 был атрибут PersistOnClose
который был бы достаточно для моего требования. в wf4 он был заменен на Persist
активность, которая также может быть полезна, однако я не хочу иметь дополнительные действия в моих уже сложных рабочих процессах.
В идеале было бы здорово, чтобы быть в состоянии выполнить context.RequestPersist(callback)
из NativeActivityContext
, однако этот метод является внутренним (и все, что находится внутри него не видно снаружи оригинальной сборки.