2010-10-21 13 views
6

Imaginemos que hay 2 páginas en el sitio web: rápido y lento. Las solicitudes para reducir la velocidad de la página se ejecutan durante 1 minuto, la solicitud se realiza rápidamente durante 5 segundos.ASP.NET: cómo se procesan las solicitudes paralelas

Toda mi carrera de desarrollo Pensé que si la primera solicitud iniciada es lenta: hará una llamada (sincrónica) a DB ... espera a responder ... Si durante este tiempo se completará la solicitud de la página rápida, esta solicitud se procesará mientras el sistema está esperando la respuesta de DB.

Pero hoy me he encontrado: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

Una instancia de la clase HttpApplication se utiliza para procesar muchos pedidos en su tiempo de vida. Sin embargo, solo puede procesar una solicitud a la vez. Por lo tanto, las variables miembro se pueden usar para almacenar datos por solicitud.

¿Significa que mis pensamientos originales son incorrectos?

¿Podría aclarar lo que significan? Estoy bastante seguro de que eso es lo que esperaba ...

Respuesta

4

Sus pensamientos originales son correctos, al igual que la documentación. El proceso de trabajo de IIS puede engendrar muchos hilos, cada uno con su propia instancia de la clase HttpApplication.

+0

Al parecer, también se puede desaparecerán http://stackoverflow.com/questions/2675910/how-to-know-who-kills-my-threads – Justin

+0

¿Quieres decir que es posible tener varios de los casos HttpApplication en cualquier momento. No tiene mucho sentido para mí ... ¿Entiendo correctamente que solo el primer hilo creado debería generar el evento "Application_Start"? – Budda

+0

BTW, gracias por su ayuda. :) – Budda

4

ASP .NET alojará varios AppDomains para su aplicación web en un único proceso de trabajo (w3wp.exe). Incluso puede compartir AppDomains para diferentes aplicaciones web bajo el mismo proceso de trabajo (si están asignadas al mismo grupo de aplicaciones).

Cada AppDomain creado por ASP .NET puede albergar múltiples instancias de HttpApplication que atiendan solicitudes y recorran el ciclo de vida ASP .NET. Cada HttpApplication puede (como usted ha dicho) responder a una solicitud a la vez.

+1

Adivina, quieres decir "ASP .NET alojará varios AppDomains para tus aplicaciones webS". Desde mi punto de vista, no tiene sentido tener pocos dominios de aplicaciones para una aplicación web. ¿Estoy en lo cierto? – Budda

+0

BTW, gracias por su ayuda. :) – Budda

+1

Desde el punto de vista de una aplicación web múltiple, tiene muchísimo sentido. Definitivamente no desea que se ejecuten dos aplicaciones web diferentes en el mismo Dominio de aplicaciones y que compartan recursos desde el punto de vista de la seguridad. En general, según tengo entendido, el objetivo de ejecutar AppDomains por separado dentro de un solo proceso de trabajo es la estabilidad, por lo que una sola falla de AppDomain no derriba toda la aplicación web. – Jeff

4

Las solicitudes deben procesarse en orden secuencial en el lado del servidor si las dos solicitudes utilizan el mismo estado de sesión con acceso de lectura/escritura, debido al bloqueo de la sesión asp.net.

Puede encontrar más información aquí: http://msdn.microsoft.com/en-us/library/ie/ms178581.aspx

peticiones concurrentes y el estado de sesión

acceso a estado de sesión ASP.NET es exclusivo por sesión, lo que significa que si dos usuarios diferentes hacen peticiones concurrentes , el acceso a cada sesión por separado se otorga simultáneamente. Sin embargo, si se realizan dos solicitudes simultáneas para la misma sesión (utilizando el mismo valor de ID de sesión), la primera solicitud obtiene acceso exclusivo a la información de la sesión. La segunda solicitud se ejecuta solo después de que finaliza la primera solicitud. (La segunda sesión también puede obtener acceso si se libera el bloqueo exclusivo de la información porque la primera solicitud excede el tiempo de espera de bloqueo). Si el valor de EnableSessionState en la directiva @ Page se establece en ReadOnly, una solicitud de solo lectura la información de la sesión no da como resultado un bloqueo exclusivo en los datos de la sesión. Sin embargo, las solicitudes de solo lectura para datos de sesión aún tienen que esperar a que se elimine un bloqueo establecido por una solicitud de lectura y escritura para datos de sesión.

Cuestiones relacionadas