2009-01-17 9 views
7

En ASP.NET 3.5 (con IIS6), ¿se crean AppDomains para cada solicitud? Sé que todas las aplicaciones tienen su propio AppDomain bajo w3wp.exe, pero ¿cómo funciona todo el AppDomain?¿Se crean AppDomains para cada solicitud?

Estaba discutiendo hoy con un colega que estaba tratando de convencerme de que si una aplicación ASP.NET tiene un objeto estático (o clase Singleton), este objeto se compartirá entre todas las solicitudes. Creo que esto es falso ¿Estoy en lo cierto? ¿Cómo convencer a mi colega?

Gracias!

Respuesta

9

Lamento decir que su colega está en lo cierto. Dentro de una aplicación ASP.NET, cada aplicación configurada como tal en IIS se ejecuta dentro de su propio AppDomain, que es el alcance de un objeto singleton. Por lo tanto, un singleton en App1 está disponible para todas las solicitudes de App1 (y podría convertirse en una concurrencia si no se maneja con cuidado), pero las solicitudes en App2 no podrían acceder al singleton en App1.

Threading and Pooling in the HTTP Pipeline http://i.msdn.microsoft.com/cc164128.fig01(en-us).gif

Este diagrama de MSDN Magazine ayuda a mostrar cómo se aísla cada aplicación en su propio dominio de aplicación. Si bien el diagrama muestra un proceso de trabajo de IIS5 (aspnet_wp.exe), un proceso de trabajo de IIS6 sería similar para las aplicaciones configuradas para ejecutarse en el mismo grupo de aplicaciones.

1

A singleton existirá en todo el ámbito de la dominio de aplicación. Además, todas las solicitudes a su aplicación irán al mismo dominio de aplicación, por lo que su colega es realmente correcto.

Actualización: La pregunta impulsado por la curiosidad y me encontré con un "producto único" que se puede utilizar en un per-request basis. En realidad, no lo recomiendo. Si alguien necesita un singleton por solicitud, entonces necesitan encontrar un patrón más apropiado.

+0

¿Tiene alguna idea de documentación a la que pueda referirme? ¡Gracias! – Martin

Cuestiones relacionadas