我们正在使用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具有完全相同的行为。
提前致谢。
答案 0 :(得分:0)
事实证明,MVC框架在请求结束时执行会话数据的单个更新,这意味着只保存最后一个值。
由于在单个请求 - 响应周期中执行“冗长”操作,因此在会话中存储中间状态信息的想法是完全错误的。