MVC4在请求结束前强制会话更新

时间:2014-01-13 12:12:13

标签: asp.net-mvc-4 session-state

我们正在使用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具有完全相同的行为。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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