我正在使用 WF 4.5 实现凝视机应用程序;此工作流由使用 WorkflowApplication 类的 WCF 服务托管。它旨在由查询 WCF 服务以重定向到映射到状态机工作流中定义的状态的特定页面的 ASP.NET MVC 应用程序使用。我需要工作流的执行应该是同步的,以便在调用转换时为 MVC 应用程序提供当前状态;如本文所述,我正在强制使用 SynchronousSynchronizationContext:
http://www.develop.com/synchworkflow
但我面临着一种奇怪的行为;当我第一次调用工作流应用程序时,一切正常,工作流应用程序以同步方式执行其任务。但是,当我通过书签调用恢复(工作流被持久化)时,工作流应用程序以异步方式事件执行,尽管我仍然强制同步 SynchronizationContext。
下面是我正在使用的代码的摘录:
public class WorkflowManager
{
public Guid Run(Activity activity, IDictionary<string, object> parameters)
{
WorkflowApplication wfApp = SetUpInstance(activity, parameters);
wfApp.Run();
return wfApp.Id;
}
public void Resume(Guid id, Activity activity, string bookmarkName)
{
WorkflowApplication wfApp = SetUpInstance(activity, null);
wfApp.Load(id);
wfApp.ResumeBookmark(bookmarkName, "test");
}
WorkflowApplication SetUpInstance(Activity activity, IDictionary<string, object> parameters)
{
Guid id = Guid.Empty;
WorkflowApplication wfApp = null;
if (parameters != null)
{
wfApp = new WorkflowApplication(activity, parameters);
}
else
{
wfApp = new WorkflowApplication(activity);
}
SynchronousSynchronizationContext syncContext = new SynchronousSynchronizationContext();
wfApp.SynchronizationContext = syncContext;
wfApp.Idle = AppIdle;
wfApp.PersistableIdle = (e) =>
{
return PersistableIdleAction.Unload;
};
wfApp.Aborted = AppAborted;
wfApp.OnUnhandledException = AppException;
ChangedStateNotifier extensionNotifier = new ChangedStateNotifier();
extensionNotifier.Notification += delegate(object sender, HostNotifyEventArgs e)
{
if (ChangedState != null)
{
ChangedState(e.WorkflowId, e.WorkflowStatus);
}
};
wfApp.InstanceStore = store;
wfApp.Extensions.Add(extensionNotifier);
return wfApp;
}
}
我很感激每个人都可以给我一个提示我做错了什么。谢谢并恭祝安康。