1

在我的 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
}
}

因此,为了停止我长时间运行的优化,ASP .NET MVC 应该在“优化”方法运行时让“停止”方法通过。

我知道只有当整个控制器类的 SessionSate 至少设置为“ReadOnly”时,才能并行处理请求。我已经按照这篇博文中的步骤进行了操作。但是,这意味着不能再将数据写入会话,这是优化方法所要求的。

出于这个原因,我决定从这个 Controller 中删除“Stop”-Method 并将其放在一个额外的 Controller 中,为此我将 SessionState 设置为“ReadOnly”:

...
using Microsoft.Web.Mvc;
...

[ControllerSessionState(ControllerSessionState.ReadOnly)]
public class StopController: Controller
{
    public void Stop()
    {
         //Stop long running optimization
    }
}

但是,Stop-Request 仍然只有在另一个控制器中的优化完成后才被处理。此外,我尝试实现一个自定义控制器工厂,该工厂允许分别为每个 ActionMethod定义会话状态- 这在此处进行了描述。这对我不起作用,因为我不使用 ASP .NET MVC 3,而只使用 ASP .NET MVC 2 和 MVC Futures Library。

有谁知道我如何实现一个允许用户从客户端停止我长时间运行的方法的停止方法?

4

0 回答 0