【发布时间】:2013-04-22 01:15:00
【问题描述】:
我在 ASP .NET MVC 4 中有一个奇怪的问题。在 AccountController 中,我正在对某些操作进行重定向,并在此之前将数据放入 TempData(存储在 Session 中):
[AllowAnonymous]
public ActionResult Activate(string token)
{
new CustomSignupService().Activate(token);
TempData["Message"] = "User was successfully confirmed";
return RedirectToAction("Message", "Home")
}
现在我知道在这种情况下我可以只返回共享消息视图,但这只是重现问题的代码示例。
CustomSignupService.Activate 通过 NHibernate 进行数据库查找并更新事务中的用户(用户激活)。 有时(假设 1/5 次尝试在 5 分钟内) TempData 无法通过重定向,因此我将登录添加到 Session_End 并注意到调用 RedirectToAction 时会话结束。在调用 Session_Start 之后,当然 TempData 消失了。
会话有默认超时(20 分钟)并且控制器使用 SessionStateBehavior.ReadOnly
有什么想法吗?
更新
第 1 步:这不是应用程序池回收(我打开了应用程序池上的所有常规回收事件日志条目并检查了事件日志,会话重新启动后但回收没有导致它)
【问题讨论】:
-
类似主题;我的回答可能会有所帮助:stackoverflow.com/a/23804262/3253726
-
我的行为完全相同。你找到根本原因了吗?
-
不,遗憾的是我没有@jas
-
最后,我认为我的问题有所不同。有人将应用程序池回收设置为低请求数,并且在负载测试期间回收非常快,导致此问题。 (设置为 500,但我们每秒发出 100 个请求)@PavleGartner
标签: c# .net session asp.net-mvc-4 redirecttoaction