2011-02-11 8 views
7

Estoy administrando un proyecto bastante grande, escrito en asp.net webforms + mvc3, con una gran base de usuarios y un conteo de visitantes diario bastante alto. Básicamente, hay muchas solicitudes en cualquier momento dado.¿Funciona correctamente el atributo SessionState en MVC 3?

Una de mis controladores de MVC que maneja/redimensiona las imágenes sobre la marcha tiene el siguiente atributo que se le aplica:

[SessionState(SessionStateBehavior.Disabled)] 

Ahora, si una acción en el controlador intenta acceder a la sesión - es obvio que lanza una excepción, así que estamos bien hasta ahora.

El problema es: si voy a la ventana Procesos de trabajo de IIS (Win Server 2008 R2, IIS 7.5) y compruebo las solicitudes actuales para este sitio, a veces puedo ver las solicitudes de una acción en este controlador. Su estado actual está bloqueado en State: RequestAcquireState, Module Name: Session. A veces estos bloqueos pasan más de un segundo o dos en este estado.

¿No fue el objetivo del atributo en primer lugar hacer que las solicitudes al controlador ignoren el estado y no pierdan tiempo (y posiblemente estén bloqueadas) intentando adquirir el estado?

Si esto es así, ¿estoy haciendo algo mal aquí, o el problema está en otra parte?

+0

Hola Levi, ¿podrías hacer de esto una respuesta para que yo pueda marcarlo como tal? :) –

Respuesta

12

[emigrado de comentarios]

Si está utilizando una fábrica de controlador personalizado o manipulador de ruta, asegúrese de que son conscientes de la conducta estado de sesión del controlador. Marcar un controlador que no requiere estado de sesión requiere la cooperación de ambos componentes. De fábrica, DefaultControllerFactory y MvcRouteHandler están diseñados para funcionar con esto. Consulte DefaultControllerFactory.GetControllerSessionBehavior y MvcRouteHandler.GetHttpHandler para obtener más información. Si está escribiendo componentes personalizados, puede usar esos métodos como inspiración.

+1

¡Gran respuesta! De hecho, utilicé un controlador de ruta personalizado, derivado de IRouteHandler. Cambié mi manejador para derivar de MvcRouteHandler y me aseguré de usar la implementación base junto con mis reemplazos. Gracias :) –

+1

Ding ding ding ding. Dale a ese hombre un premio –

Cuestiones relacionadas