Asp.net mvc 4 MVC4在请求结束前强制更新会话

Asp.net mvc 4 MVC4在请求结束前强制更新会话,asp.net-mvc-4,session-state,Asp.net Mvc 4,Session State,我们正在使用VS2010和MVC4进行开发,在Windows7上的IIS 7.5上部署我们的web应用程序 我们的项目有一个长期运行的过程,我们希望显示状态和进度 为了实现这一点,我们有一个小的可序列化类,它具有描述当前状态的属性。长操作伪代码如下所示: int curentPercentComplete = 0; EngineStatus status = new EngineStatus(); while (!done) { status.PercentComplete = cure

我们正在使用VS2010和MVC4进行开发,在Windows7上的IIS 7.5上部署我们的web应用程序

我们的项目有一个长期运行的过程,我们希望显示状态和进度

为了实现这一点,我们有一个小的可序列化类,它具有描述当前状态的属性。长操作伪代码如下所示:

int curentPercentComplete = 0;
EngineStatus status = new EngineStatus();
while (!done) {
    status.PercentComplete = curentPercentComplete;
    Session['status'] = status;
    // do lengthy operation
    curentPercentComplete = compute();
    done = isJobFinished();
}
我们还有另一个控制器操作,它尝试从会话检索当前状态 然后将其编码为json,并通过Ajax请求将其返回到浏览器

我们的问题是,我们似乎总是从上一个请求中获取最后保存的数据,换句话说,会话对象在执行while块期间似乎不会更新session['status']字段

我们已经用完全相同的行为尝试了InProc和StateServer的会话状态模式


提前感谢。

事实证明,MVC框架在请求结束时对会话数据执行一次更新,这意味着只保存最后一个值


由于“冗长”操作是在一个请求-响应周期内执行的,因此在会话中存储中间状态信息的想法显然是错误的。

冗长的过程是异步的吗?更新完成标志?当它在不同的阶段运行时?如果您想调试它,请使用一个字符串,并继续向其添加currentPercentComplete值。这样您就可以找到会话值在不同阶段是如何更新的。@GirishSakhare while循环中的所有代码都是同步运行的。老实说,实际的实现使用一个for-lopp运行,它迭代了特定的次数。在这种情况下,您将只得到两种状态,即0%和100%。尝试字符串状态=状态+“”+currentPercentComplete;会话[“状态”]=状态;查看确切的执行行为。