我编写了托管在 Azure 中的 MVC 3 应用程序。我正在使用会话变量来存储我长期运行的进程之一的 http 调用之间的更新状态信息。然后使用它来更新进度条。这些值可以很快改变。
这在使用 InProc 会话提供程序时效果很好。但是,每当我更改为使用 Azure 缓存会话提供程序时,会话变量都不会从长时间运行的进程中更新。
我现在正在更改内容以直接使用缓存变量,这似乎到目前为止有效。
为什么在缓存中使用 Session 时以下方法不起作用,但 InProc 很好?
例如,我设置可能在一个控制器 ActionResult 中启动会话变量
Session["OPERATION_PROGRESS"] = 0;
然后我得到一个会话的句柄,比如
HttpSessionStateBase session = Session;
并将其传递给我的长期运行过程,例如
LongRunningProcess.Go(session);
然后在 LongRunningProcess 方法中,它将在使用传递的会话对象完成任务时更新会话变量。
passedSession["OPERATION_PROGRESS"]=10;
Web 客户端调用一个进度页面,该页面将会话变量值传回以更新进度条。