2011-02-11 43 views
7

我管理着一个相当大的项目,用asp.net webforms + mvc3编写,拥有庞大的用户群,每天的访客数量非常高。基本上,在任何特定时刻都有很多请求。MVC 3中的SessionState属性是否正常工作?

我的一个MVC控制器,处理/的调整大小的飞行图像应用了以下属性吧:现在

[SessionState(SessionStateBehavior.Disabled)] 

,在控制器的动作试图访问会话 - 它显然抛出一个例外 - 所以我们迄今为止很好。

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

是否首先向控制器发出请求的属性的全部观点忽略了状态,而不是浪费时间(并且可能被锁定)试图获取状态?

如果这样 - 我在这里做错了什么,或者问题在别处?

+0

嗨莱维,你能否让这个答案,以便我可以标记为这样? :) – 2011-02-14 10:42:14

回答

12

[从意见迁移]

如果您正在使用自定义控制器工厂或路由处理,确保他们知道控制器的会话状态的行为。将控制器标记为不需要会话状态需要来自这两个组件的合作。开箱即用的是,DefaultControllerFactory和MvcRouteHandler被设计用于处理这个问题。有关更多信息,请参阅DefaultControllerFactory.GetControllerSessionBehavior和MvcRouteHandler.GetHttpHandler。如果您正在编写自定义组件,则可以使用这些方法作为灵感。

+1

很好的答案!我实际上使用了一个自IRouteHandler派生的自定义路由处理程序。我已经改变了我的处理程序来取代MvcRouteHandler,并确保使用基本实现和我的覆盖。谢谢:) – 2011-02-16 09:56:49