Nivel de aplicación ASP.NET frente a nivel de sesión y Global.asax ... confuso

El siguiente texto es del libro que estoy leyendo, "MCTS Self-Paced Training Kit (Examen 70-515) Desarrollo de aplicaciones web con ASP.NET 4". Ofrece un resumen del ciclo de vida de las aplicaciones.

  1. Un usuario primero solicita una página en su sitio.
  2. La solicitud se enruta a la canalización de procesamiento, que la reenvía al tiempo de ejecución de ASP.NET.
  3. El tiempo de ejecución de ASP.NET crea una instancia de la clase ApplicationManager; esta instancia de clase representa el dominio del marco .NET que se utilizará para ejecutar solicitudes para su aplicación. Un dominio de aplicación aísla las variables globales de otras aplicaciones y permite que cada aplicación se cargue y descargue por separado, según sea necesario.
  4. Una vez creado el dominio de la aplicación, se crea una instancia de la clase HostingEnvironment. Esta clase proporciona acceso a elementos dentro del entorno de alojamiento, como carpetas de directorio.
  5. ASP.NET crea instancias de los objetos principales que se utilizarán para procesar la solicitud. Esto incluye los objetos HttpContext, HttpRequest y HttpResponse.
  6. ASP.NET crea una instancia de la clase HttpApplication (o se reutiliza una instancia). Esta clase también es la clase base para el archivo Global.asax de un sitio. Puede usar esta clase para atrapar eventos que suceden cuando su aplicación se inicia o se detiene. Cuando ASP.NET crea una instancia de HttpApplication, también crea los módulos configurados para la aplicación, como SessionStateModule.
  7. Finalmente, ASP.NET procesa la solicitud a través de la pipleline HttpApplication. Esta canalización también incluye un conjunto de eventos para validar solicitudes, mapear URL, acceder a la caché y más.

Luego, el libro demostró un ejemplo de uso del archivo Global.asax:

   <script runat="server">
void Application_Start(object sender, EventArgs e)
{
Application["UsersOnline"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>

¿Cuándo comienza una aplicación? ¿Cuál es la diferencia entre sesión y nivel de aplicación? Estoy bastante confundido sobre cómo se maneja esto. Pensé que las clases de nivel de aplicación "se sentaban encima" de un objeto de dominio de aplicación, y el dominio de aplicación contenía información específica de esa sesión para ese usuario. ¿Alguien podría explicar cómo IIS administra las clases de nivel de aplicación y cómo una clase HttpApplication se encuentra en un dominio de aplicación? Se agradece cualquier cosa.

preguntado el 08 de enero de 11 a las 18:01

1 Respuestas

Nada vive fuera de un AppDomain así que por supuesto el HttpApplication tiene que ser instanciado dentro de uno.

Los pasos 3 a 6 solo ocurren UNA VEZ durante la vigencia de su solicitud. Cuando un ApplicationManager Se ha creado una instancia, no se volverá a crear para la próxima solicitud. Lo mismo es para HostingEnvironment y HttpApplication. Esto significa que los valores almacenados en la colección de aplicaciones permanecerán allí para obtener todas las solicitudes posteriores durante la vida útil de la aplicación.

Hay uno AppDomain por aplicación, no por sesión o por solicitud.

Respondido el 09 de enero de 11 a las 01:01

Hay un AppDomain por aplicación, no por sesión ni por solicitud. ¿Por aplicación significa Por sitio web en IIS? Necesito saber si solo hay un dominio de aplicación que gestiona todas las solicitudes de un sitio web. Zviadi

depende de lo que considere un sitio web ... una subcarpeta en un sitio web se puede configurar como una aplicación, luego las solicitudes que van a esa carpeta serán manejadas por su propia aplicación, y cosas como HttpApplication será exclusivo de esa carpeta. Pero, en general, sí, un sitio web es una aplicación. - Pauli Østerø

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.