2009-07-23 20 views
23

¿Hay alguna manera de especificar que un controlador o acción determinado utiliza el estado de sesión de forma de solo lectura? En "antiguo" ASP.NET solíamos hacer algo como esto:Especificación de sesión de solo lectura en ASP.NET MVC

<%@ Page EnableSessionState="ReadOnly" %> 

¿Existe un equivalente de ASP.NET MVC? Estoy buscando permitir que mi aplicación sirva múltiples solicitudes del mismo cliente simultáneamente, y desactivar la sesión por completo es -no- una opción en mi caso.

+0

posible duplicado de [Desactivar el estado de sesión por solicitud en ASP.Net MVC] (http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam

Respuesta

8

Una pregunta similar se le pidió aquí: Disable Session state per-request in ASP.Net MVC

Las ofertas respuesta aceptada con la creación de un controlador de ruta personalizada que en última instancia se salta unirse a la sesión. Esto no responde exactamente a su pregunta (que es cómo declarar varias acciones para usar el acceso de sesión de solo lectura), pero parecía lo suficientemente relevante como para mencionarlo.

1

Esto podría ser un poco engañoso; mi opinión es que configurar el estado de la sesión es algo que ocurrió en el nivel IHttpHandler. Con los controladores personalizados, puede especificar el estado de la sesión mediante el uso de interfaces de marcador, como IReadOnlySessionState para declarar que solo necesita el estado de sesión de solo lectura. Podría intentar agregar eso a su controlador y ver cómo vuela. Sospecho que no lo hará porque los controladores de mvc de ASP.NET suceden mucho después de que IHttpHandler está conectado, pero vale la pena intentarlo.

Otra solución podría ser ajustar las variables de estado de la sesión en su propia clase, y exponer una versión de solo lectura para exigir solo lectura. Acceder a él a través de múltiples solicitudes no debería ser un problema, pero está en lo cierto de que puede obtener condiciones de carrera y eso si comienza a tratar de escribir en las mismas variables de sesión desde múltiples ángulos.

+0

El objetivo no es hacer que las variables sean de solo lectura, el objetivo es permitir múltiples solicitudes simultáneas a páginas MVC desde un solo cliente. Ajustar las variables de la sesión en un contenedor de solo lectura no ayudará. – Mark

+0

Supongo que no te estoy siguiendo en ese momento, ¿por qué es importante leer solo para evitar condiciones de carrera cuando podría haber actualizaciones simultáneas? Si todas sus páginas solo están leyendo datos de la sesión, tener solicitudes simultáneas no va a doler. Si todas sus páginas necesitan actualizar la sesión al mismo tiempo, envolver las cosas como ReadOnly no va a ayudar. –

+1

Solo lectura es importante porque el tiempo de ejecución de ASP.NET no permitirá múltiples solicitudes del mismo cliente a menos que se especifique la sesión de solo lectura. No puedo TENER solicitudes simultáneas a menos que especifique una sesión de solo lectura, y la pregunta me pregunta cómo hacerlo en ASP.NET MVC. – Mark

-2

¿Qué pasa si configura los datos que desea que sean "de solo lectura" como estáticos en su modelo? De esta forma, podría tener solicitudes simultáneas a MVC con los mismos datos.

+2

No estoy tratando de resolver problemas de subprocesamiento aquí, el problema es que ASP.NET no permitirá que una aplicación web maneje múltiples solicitudes del mismo cliente al mismo tiempo, a menos que piense que cualquiera de los estados de sesión está desactivado. , o que el manejador particular que procesa las solicitudes no modificará el estado de la sesión. Hacer campos en el modelo estático no notificará a ASP.NET que el estado de la sesión es de solo lectura. – Mark

Cuestiones relacionadas