【发布时间】:2012-05-02 12:43:17
【问题描述】:
我编写了托管在 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 客户端调用一个进度页面,将会话变量值传回以更新进度条。
【问题讨论】:
-
您是否将
Serializable对象存储在 Azure 缓存中?你的sessionState/@timeout是什么?您的会话是否会在您的长时间运行的流程结束之前超时?您应该分享相关的sessionStateXML 配置 (AppFabricCacheSessionStoreProvider)。 -
我只在会话变量中存储字符串和整数类型。该过程间歇性地工作,因此我认为逻辑没有错误,但与提交或缓存或其他导致延迟或未处理/未报告故障的因素有关。
标签: asp.net-mvc-3 session azure session-variables azure-caching