我在MVC 3应用程序中运行了一个可持久的Workflow,运行良好,但是当工作流程完成时,会抛出WorkflowApplicationCompletedException。工作流程已成功完成,最后一个操作已完成,实例已从数据库中删除。
到目前为止,我没有找到答案的运气,所以任何想法导致异常都会受到赞赏。我目前的解决方法是捕获异常并在那里为OnCompleted-Event做我的工作。
我只是创建一个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(书签,WorkflowInputs)启动工作流并完成活动,然后当我调用run时,它会抱怨它已经完成。但是如果我在调用resume工作流程时没有调用run,那么浏览器永远不会得到任何信息,我认为它会无休止地等待,因为即使刷新也无法将其从等待状态中解脱出来。
答案 0 :(得分:1)
似乎使用ResumeBookmark后无需再调用Run。我想我之前在错误的地方做这件事,所以工作流程搞砸了,但现在似乎工作正常。
if(hasWorkflow)
application.ResumeBookmark(application.GetBookmarks().First().BookmarkName, WorkflowInputs);
else
application.Run();
答案 1 :(得分:0)