2010-12-17 8 views
7

La pregunta es, ¿es posible que las solicitudes para la misma sesión se ejecuten desde múltiples hilos? ¿Los métodos en ASP.NET son reentrantes? Especialmente estamos usando AJAX, lo que significa que se están realizando solicitudes asíncronas.¿Debo preocuparme por la seguridad de subprocesos en ASP.NET con AJAX?

¿Esto significaría colocar bloqueos alrededor de operaciones en objetos ubicados dentro de la sesión?

Sé que los bloqueos son esenciales cuando se manejan variables estáticas y amplias de la aplicación, pero la pregunta es ¿es lo mismo para los objetos de la sesión?

Respuesta

3

ASP.NET normalmente utiliza un hilo por solicitud. Puede usar más de un hilo, p. al servir asynchronous pages, pero incluso entonces solo un hilo procesará la solicitud en un momento dado.

Sin embargo, es seguro utilizar el estado de la sesión desde varios subprocesos, porque los accesos al objeto de la sesión se serializan. De MSDN:

¿Qué pasa si otras páginas intentan simultáneamente acceder al estado de la sesión? En ese caso, la solicitud actual podría terminar trabajando en datos inconsistentes , o datos que no están actualizados. Para evitar esto, el módulo de estado de sesión implementa un mecanismo de bloqueo lector/escritor y pone en cola el acceso a los valores de estado. Una página que tiene acceso de escritura de estado de sesión mantiene un bloqueo de escritor en la sesión hasta que finaliza la solicitud.

+0

No estoy del todo de acuerdo con la frase * ASP.NET utiliza un hilo por solicitud, ya sea asíncrono o no *. Esto no es así si usa [páginas asíncronas] (http://msdn.microsoft.com/en-us/magazine/cc163725.aspx). –

+0

El enlace que proporcionó es para ASP, no para ASP.Net. No sé si el artículo es válido para ASP.Net también. – GvS

+0

@GvS, true, enlace y cotización actualizados. Gracias :) –

2

La pregunta es, ¿es posible que las solicitudes de la misma sesión se ejecutan desde varios subprocesos?

Si utiliza la sesión HTTP dentro de su página, el motor ASP.NET pondrá en cola las solicitudes de la misma sesión. Nunca correrán en paralelo. Entonces, por ejemplo, si envía múltiples solicitudes AJAX a alguna página ASP.NET que utiliza sesión, esas solicitudes se ejecutarán secuencialmente.

Si no utiliza la sesión, se ejecutarán varias solicitudes simultáneas en paralelo.

+0

No lo sabía, ¿dónde lo descubriste? Estoy interesado en leer un poco más sobre eso. –

+0

@Antony: aquí hay un artículo http://msdn.microsoft.com/en-us/library/aa479041.aspx#aspnetsessionstate_topic3 –

Cuestiones relacionadas