Persistable Workflow with MVC - запускать исключение при завершении - PullRequest
1 голос
/ 25 марта 2011

Я запускаю постоянный рабочий процесс в приложении MVC 3, который работает хорошо, но когда рабочий процесс завершается, генерируется исключение WorkflowApplicationCompletedException.Рабочий процесс успешно завершен, последние выполненные действия и экземпляр удалены из базы данных.

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

Я просто создаю приложение WorkflowApplication, загружаю его и возобновляю закладку.

Любые советы или предложения приветствуются,Спасибо

application.Load(new Guid(basket.StandardFields.Settings));
application.ResumeBookmark(application.GetBookmarks().First().BookmarkName, WorkflowInputs);


application.PersistableIdle = delegate(WorkflowApplicationIdleEventArgs e)
{
    if (e.Bookmarks != null && e.Bookmarks.Count > 0)
    {
        _viewName = e.Bookmarks[0].BookmarkName;
    }

    syncContext.OperationCompleted();
    return PersistableIdleAction.Unload;
};

application.Completed = delegate (WorkflowApplicationCompletedEventArgs e)
{
    CompleteWorkflow(syncContext);
};

application.SynchronizationContext.OperationStarted();

try
{
    application.Run();
}
catch(WorkflowApplicationCompletedException)
{
    CompleteWorkflow(syncContext);
}

Редактировать

Кажется, что application.ResumeBookmark (bookmark, WorkflowInputs) запускает рабочий процесс и завершает действия, затем, когда я вызываю команду run, онажалуется, что оно уже завершено.Но если я не вызываю run, когда вызывается рабочий процесс возобновления, браузер никогда не получает никакой информации, и я думаю, что он бесконечно ждет, потому что даже обновление не может вывести его из состояния ожидания.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Похоже, что с ResumeBookmark нет необходимости впоследствии вызывать Run.Я думаю, что раньше делал это не в том месте, и поэтому рабочий процесс испортился, но, похоже, теперь он работает нормально.

if(hasWorkflow)
    application.ResumeBookmark(application.GetBookmarks().First().BookmarkName, WorkflowInputs);
else
    application.Run();
0 голосов
/ 25 марта 2011

* MSDN 1002 *:

Представляет исключение, которое выбрасывается при выполнении операции в рабочем процессе экземпляр недействителен, потому что Экземпляр завершен.

Код, который вы показываете, кажется действительным. Однако где-то вы пытаетесь возобновить рабочий процесс, который вошел в завершенное состояние. Вы должны проверять свойство Completed любого рабочего процесса, который вы пытаетесь возобновить. Бросил исключение InvalidOperationException, и вы увидите, где это происходит.

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

...