Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does the SessionState attribute in MVC 3 work properly?

I'm managing a rather large project, written in asp.net webforms + mvc3, with a large user base, and a pretty high daily visitor count. Basically, there are a lot of requests at any given moment.

One of my controllers in MVC that handles / resizes images on the fly has the following attribute applied to it:

[SessionState(SessionStateBehavior.Disabled)]

Now, if an action in the controller tries to access the session - it obviously throws an exception - so we're good so far.

The problem is: if I go to the IIS Worker Processes window (Win Server 2008 R2, IIS 7.5), and check the current requests for this site, I can sometimes see the requests to an action in this controller. Their current state is locked in State: RequestAcquireState, Module Name: Session. Sometimes these locks go over a second or two in this state.

Wasn't the whole point of the attribute in the first place to make the requests to the controller ignore the state, and not waste time (and possibly being locked) trying to acquire the state?

If this is so - am I doing something wrong here, or does the problem lie elsewhere?

like image 893
Artiom Chilaru Avatar asked Feb 11 '11 16:02

Artiom Chilaru


1 Answers

[migrated from comments]

If you're using a custom controller factory or route handler, make sure that they're aware of the controller's session state behavior. Marking a controller as not requiring session state requires cooperation from both of these components. Out-of-box, the DefaultControllerFactory and MvcRouteHandler are designed to work with this. See DefaultControllerFactory.GetControllerSessionBehavior and MvcRouteHandler.GetHttpHandler for more information. If you're writing custom components, you can use those methods as inspiration.

like image 145
Levi Avatar answered Sep 22 '22 07:09

Levi