2010-07-23 18 views
6

No he podido encontrar una respuesta definitiva a esto, cuando se establece una sesión de cliente en una aplicación ASP.NET MVC2, supongo que un hilo particular de un grupo de hebras maneja esa solicitud. ¿El mismo hilo siempre maneja todas las solicitudes posteriores para esa sesión? Entonces, en teoría, si de algún modo la identificación de la sesión se equivocó y se eligió el hilo incorrecto, ¿faltaría algún dato de nivel de sesión? GraciasSesión e hilos

+0

No estoy seguro de cómo el aspecto del subprocesamiento causaría que la ID de la sesión se estropeara. ¿Puedes explicar tu pensamiento un poco más? –

Respuesta

2

No. Cada solicitud puede manejarse con un hilo diferente. Esto significa que varios recursos en una página pueden manejarse por diferentes hilos. O pueden ser manejados en el mismo. Depende del proceso de trabajo y es para determinar si vale la pena crear un nuevo hilo o mejor esperar hasta que esté disponible.

La página se representará con un hilo y luego las imágenes, hojas de estilo y javascripts se pueden manejar en el mismo u otros hilos. Esto es fundamental para la naturaleza sin estado de ASP.NET y la programación web en general. Sin embargo, lo que le permite hacer es equilibrar la carga de todas sus solicitudes en diferentes servidores o incluso diferentes dominios.

Esto nos lleva a su pregunta sobre el estado de la sesión. No debería perder ID de sesión entre solicitudes. Si es así, algo serio está mal. O podría encontrarse en una situación de granja/clúster web en la que una solicitud va a un servidor y la siguiente se enruta a otra a través de algún tipo de equilibrio de carga.

En un escenario de equilibrio de carga, debe tener algún medio para mantener el estado de la sesión. Los dos enfoques más comunes son guardar en una base de datos y en un caché distribuido. El último es mi enfoque preferido porque los datos de la sesión son, por su propia naturaleza, algo temporal y no pertenecen a una base de datos persistente.

3

En resumen, no hay ni siquiera bajo IIS (no puedo responder por el servidor web de desarrollo "Cassini" en Visual Studio, pero dudo que allí también)

usted puede demostrar el hilo cambiar añadiendo lo siguiente a una vista:

<%= System.Threading.Thread.CurrentThread.ManagedThreadId %> 

Ahora pulsa repetidamente la página desde el navegador (o tal vez se cayeron bien desde 2 o 3 navegadores) y verá que cambiar de vez en cuando.

Dicho esto - en un escenario simple como este, es posible que a menudo ver el mismo hilo que atiende la solicitud, ya que no vale la pena ASP.NET crear más hilos de lo que necesita, pero una vez que empezar a cargar el servidor , verá múltiples hilos.