【发布时间】:2015-07-20 11:51:27
【问题描述】:
在这里输入代码我打算在一个由MVC框架编写的Web应用程序中使用WF4.5。我已经使用 WorkflowApplication 类实例来运行我的 WorkFlow。但是每当我调用运行实例的控制器中的方法时,我都会收到此错误:
此时无法启动异步操作。异步操作只能在异步处理程序或模块内或在页面生命周期中的某些事件期间启动。如果在执行页面时发生此异常,请确保将页面标记为 。此异常还可能表示尝试调用“async void”方法,在 ASP.NET 请求处理中通常不支持该方法。相反,异步方法应该返回一个任务,调用者应该等待它
我编写了这个类来执行工作流:
public class WorkFlowsPipeline : IWorkFlowsPipeline
{
private IUnitOfWork _unitOfWork;
private SqlWorkflowInstanceStore _instanceStore;
public WorkFlowsPipeline(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
//workflowInstanceStore
_instanceStore = new SqlWorkflowInstanceStore();
_instanceStore.ConnectionString ="data source=.;initial catalog=WFPersist;user id=sa;password=1;";
}
public void RecordPersistedInstanceForTheUser(int userId,Guid instanceId, Models.Enums.WorkFlowTypeEnum workFlowType)
{
_unitOfWork.UsersWorkFlows.Add(new UsersWorkFlowsInstance
{
UserId = userId,
WorkFlowId=instanceId,
WorkFlowType = workFlowType
});
}
public void RunCompleteProfileForUser(int userId)
{
var usersWorkFlow = _unitOfWork.UsersWorkFlows.GetAll().FirstOrDefault(x => x.UserId == userId);
if (usersWorkFlow == null)
{
Activity rentalWorkflow = new Activity1();
Dictionary<string, object> wfArg = new Dictionary<string, object>()
{
{
"UOW", _unitOfWork
},
{
"UserId",userId
}
};
var _wfApp = new WorkflowApplication(rentalWorkflow, wfArg);
_wfApp.SynchronizationContext = SynchronizationContext.Current;
_wfApp.InstanceStore = _instanceStore;
//_wfApp.Extensions.Add(this);
var instanceId=_wfApp.Id;
_wfApp.Run();
RecordPersistedInstanceForTheUser(userId, instanceId,WorkFlowTypeEnum.CompleteProfile);
}
else
{
//get id of instance load it from database and run it
}
}
}
我以这种方式在我的控制器操作中调用了该方法:
public async Task<ActionResult> Index()
{
var userId = User.Identity.GetUserId<int>();
_workFlowsPipeline.RunCompleteProfileForUser(userId);
return View();
}
【问题讨论】:
-
请发布您的代码
-
我已经发布了我的代码。它是如此简单,我看不出它有什么特别之处。我真的怀疑 ASP.net MVC 是否能够执行 WF。我看到了一个将 MVC 与 WF 一起使用但使用 AsyncControllers 的示例。我想知道是否需要这样做?我在操作中使用了流行的 Async Await 关键字,但它不起作用。可能我应该使用 WCF 服务以便将 WF 加入我的 MVC 项目虽然我的项目架构不是 SOA。请帮我找到路。
-
其实我期待更多在 MVC 框架中使用 WF 的文档和示例。有时我认为 WF 是一种已在现实世界中不再使用的死技术。
-
根据微软的说法,WF 并没有死,尽管最近在它上面做的事情并不多,但它仍然是 .NET 4.6 的一部分。哪一行代码抛出了这个错误?没有理由不能从控制器操作中运行 WF。在旁注中,查看您的代码,您使用依赖注入来注入 IUnitOfWork,考虑使用它来注入 SqlWorkflowInstanceStore 以及..
标签: model-view-controller workflow-foundation