Обработка ошибок Windows Workflow Foundation 4 (WF4) - PullRequest
5 голосов
/ 30 марта 2010

Каков наилучший способ получения сообщений об ошибках из рабочего процесса WF4 обратно в хост-приложение ASP.NET MVC? Мне нужно, чтобы рабочий процесс не прерывался, но продолжал быть активным, а затем передавал обратно в хост-приложение сообщение об ошибке, чтобы пользователь мог предпринять альтернативное действие, но я не уверен, как это сделать.

Ответы [ 3 ]

6 голосов
/ 30 марта 2010

Чтобы ваш рабочий процесс был активным, вам нужно перехватить исключение в вашем рабочем процессе. Добавьте действие TryCatch в свой рабочий процесс, и в блоке Catch вы можете использовать отправку или пользовательское действие для отправки данных в хост-приложение.

Единственное исключение - использовать исключение WorkflowApplication.OnUnhandledException с сохранением и указать прерывание. В этом случае состояние в рабочем процессе в памяти просто удаляется, и рабочий процесс может быть перезагружен для последнего сохраненного состояния. Если вы идете по этому пути, вам нужно убедиться, используя действие Perist, что ваш рабочий процесс сохраняется всякий раз, когда что-то не может быть переделано.

2 голосов
/ 30 марта 2010

TryCatch не совсем достаточно, когда дело доходит до WF4. Кроме того, обработка события UnhandledException с вашего хоста рабочего процесса на самом деле мало что говорит вам о том, какое действие не удалось и почему.

Предлагаемый подход - использовать TryCatch и Activity tracking в WF4. Хорошее резюме этого можно найти здесь: http://msmvps.com/blogs/theproblemsolver/archive/2009/11/27/trycatch-activity-in-wf4.aspx

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

0 голосов
/ 30 марта 2010

Три способа, о которых я могу думать ...

WorkflowApplication.OnUnhandledException существует, чтобы сообщить вам, когда выдается необработанное исключение, но я не уверен, сможете ли вы восстановиться после этого. Не похоже на хорошую дорогу, чтобы идти вниз.

WorkflowApplication.PersistableIdle позволяет узнать, когда действие рабочего процесса создало закладку и приостановило рабочий процесс. На этом этапе рабочий процесс ждет, когда вы вернетесь с дополнительной информацией, чтобы вернуться в рабочий процесс, когда вы возобновите работу с закладкой. Это может быть вашим лучшим выбором, поскольку его относительно просто внедрить и использовать.

Еще один поворот заключается в создании расширения , которое ваши действия могут получить из контекста рабочего процесса. Расширения дают вам более гибкий способ взаимодействия вне рабочего процесса, хотя вы должны их кодировать и гарантировать, что они работают как положено. Закладка + расширение будет вашим самым гибким вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...