在我的ASP .NET MVC2应用程序中,有两种控制器方法:
public class MyController : Controller{
public ActionResult Optimization(...){
//long running optimization
//this method writes to the Session
}
public void StopOptimization(){
//user wants to stop the optimization
//no access to Session needed
}
}
因此,为了停止长时间运行的优化,在“优化”-Method正在运行时,ASP .NET MVC应该允许“停止”-Method。
我知道只有当SessionSate至少设置为整个控制器类的“ReadOnly”时,才能并行处理请求。我已经按照this blog post中的步骤进行操作了。 但是,这意味着无法再将数据写入Session,这是Optimization-Method所需要的。
出于这个原因,我决定从这个Controller中删除“Stop”-Method并将其放在一个额外的Controller中,为此我将SessionState设置为“ReadOnly”:
...
using Microsoft.Web.Mvc;
...
[ControllerSessionState(ControllerSessionState.ReadOnly)]
public class StopController: Controller
{
public void Stop()
{
//Stop long running optimization
}
}
但是,只有在其他控制器中的优化完成后,才会处理停止请求。 此外,我尝试实现一个自定义控制器工厂,允许为每个ActionMethod单独定义会话状态 - 这被描述为here。这对我不起作用,因为我不使用ASP .NET MVC 3,而只使用ASP .NET MVC 2和MVC Futures Library。
有没有人知道如何实现一个允许用户从客户端停止长时间运行方法的停止方法?