我们正在尝试从服务器会话(IIS)迁移到Redis支持的会话。我使用自定义sessionState配置更新了web.config。我发现只保存了部分键/值对。我希望在那里的5个中只有2个。我验证了我所有的代码最终都达到了HttpContext.Current.Session.Add。我已验证我的POCO已标记为可序列化。在监视方面,我看到它添加了前两对,然后添加了所有对。没有命中,没有拒绝,没有例外。没事。
有人见过吗?知道我可以开始寻求解决的地方吗?
TIA, 马特
更新1:我已切换为使用JSON序列化器来存储我的数据。一样。似乎不是序列化问题。
更新2:我现在已经下载了源代码,对其进行了编译和调试。似乎将会话项发送到Redis的SetAndReleaseItemExclusive方法仅被单击一次,尽管在我的网站处理SSO并从页面跳到页面以加载用户等时应该被多次点击。必须调查为什么只发射一次...
答案 0 :(得分:1)
弄清楚了。原来我没有MVC应用程序的对“ API”端点的AJAX请求没有附加适当的会话状态。因此,从未调用SetAndReleaseItemExclusive。添加此修复程序:
protected void Application_PostAuthorizeRequest()
{
if (HttpContext.Current.Request.Url.LocalPath == "/api/user/load")
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
else
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.ReadOnly);
}