【问题标题】:Does the SessionState attribute in MVC 3 work properly?MVC 3 中的 SessionState 属性是否正常工作?
【发布时间】:2011-02-11 16:39:14
【问题描述】:

我正在管理一个相当大的项目,用 asp.net webforms + mvc3 编写,拥有庞大的用户群和相当高的每日访问量。基本上,任何时候都有很多请求。

我在 MVC 中动态处理/调整图像大小的控制器之一应用了以下属性:

[SessionState(SessionStateBehavior.Disabled)]

现在,如果控制器中的操作尝试访问会话 - 它显然会引发异常 - 所以到目前为止我们很好。

问题是:如果我进入 IIS 工作进程窗口(Win Server 2008 R2,IIS 7.5)并检查该站点的当前请求,我有时可以看到对该控制器中某个操作的请求。他们当前的状态被锁定在State: RequestAcquireState, Module Name: Session。有时这些锁在这种状态下会持续一两秒。

首先属性的全部意义不是让对控制器的请求忽略状态,而不是浪费时间(并且可能被锁定)尝试获取状态吗?

如果是这样 - 我是不是在这里做错了什么,还是问题出在其他地方?

【问题讨论】:

  • 嗨,Levi,你能把这个作为答案,以便我可以这样标记吗? :)

标签: asp.net session asp.net-mvc-3


【解决方案1】:

[从 cmets 迁移而来]

如果您使用的是自定义控制器工厂或路由处理程序,请确保它们了解控制器的会话状态行为。将控制器标记为不需要会话状态需要这两个组件的合作。开箱即用的 DefaultControllerFactory 和 MvcRouteHandler 旨在与此一起使用。有关详细信息,请参阅 DefaultControllerFactory.GetControllerSessionBehavior 和 MvcRouteHandler.GetHttpHandler。如果您正在编写自定义组件,则可以使用这些方法作为灵感。

【讨论】:

  • 很好的答案!我实际上使用了一个从 IRouteHandler 派生的自定义路由处理程序。我已将处理程序更改为从 MvcRouteHandler 派生,并确保使用基本实现和我的覆盖。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多