Dominios de aplicaciones dobles en la aplicación ASP.NET 4
iis-7 .net-4.0 (4)
Aunque no está creando un
AppDomain
, una biblioteca que está utilizando podría ser. ¿Qué componentes de terceros estás usando? ¿Tiene alguna biblioteca de Inversión de control o Proxy dinámico que pueda ser responsable? Aquí hay una explicación de esto pasando con Castle .¿Estás seguro de que la aplicación solo se ejecuta en un lugar en IIS? Es posible tener múltiples sitios / aplicaciones IIS ejecutándose fuera de los mismos archivos. Esto sería coherente con (1) obtener su información de depuración de la base de datos, en lugar de la aplicación, y (2) el reciclaje debido a la edición
web.config
consistentemente en la duplicación de dominios. Si se accede a una ubicación más comúnmente que la otra, esto podría explicar por qué a veces solo hay unAppDomain
.Si está aprovechando la función de compilación dinámica y copia oculta de ASP.NET, ASP.NET a veces tendrá varios
AppDomain
. Jim Schubert escribió un artículo llamado ASP.NET, AppDomains y shadow-copy, que explica esto con más detalle y hace varias sugerencias sobre cómo modificarweb.config
para personalizarlo. También tiene una respuesta útil en ¿Se detiene la ejecución de mi aplicación ASP.NET si sobrescribo los archivos DLL? La copia de sombra se puede desactivar configurando<hostingEnvironment shadowCopyBinAssemblies="false" />
.
Actualizar
Me atrapó el blog de Jim Schubert y terminé leyendo esta publicación no relacionada sobre Permitir solo una instancia única de una aplicación .NET . Si todo lo demás falla, podría utilizar este enfoque para garantizar que solo se ejecute una instancia de la aplicación.
Tengo una aplicación ASP.NET ejecutándose en IIS 7 con múltiples dominios de aplicaciones, y no puedo entender por qué hay múltiples dominios de aplicaciones en un solo proceso. He agotado mi base de código, y no estoy creando explícitamente un segundo dominio de aplicación. ¿Es posible que un reciclaje no haya finalizado?
- Estos dominios dobles persistirán por algún tiempo.
- Si se produce un reciclaje debido a una configuración web o cambio binario, ambos dominios de la aplicación se desactivarán y se iniciarán dos nuevos.
- Estos servidores están sujetos a varios parches binarios y IISResets por día; a veces hay 2 dominios, a veces solo 1.
- La jardinería web está desactivada.
- Descubrí esto porque hay un temporizador en la aplicación que golpea la base de datos, y noté que un día el servidor tenía dos latidos.
En windbg,! Dumpdomain me muestra el siguiente resultado: (filtrado para mostrar solo los nombres de los dominios de la aplicación):
Line 59: Name: None
Line 66: Name: None
Line 372: Name: DefaultDomain
Line 460: Name: /LM/W3SVC/1/ROOT/MyAppDomain-1-129882892717131250
Line 4437: Name: /LM/W3SVC/1/ROOT/MyAppDomain-4-129285605131450579
Como sugiere la siguiente respuesta https://.com/a/3318367/2001769 en otro hilo, parece que el tiempo de ejecución de ASP.NET mantiene un conjunto de instancias de HttpApplication (independientemente de maxProcesses / Web Garden).
No sé si es posible, o incluso deseable, controlar este grupo. La mejor práctica podría ser crear instancias de todos los singletons de la aplicación en el evento Application_Start que se supone que se ejecuta solo una vez por aplicación y no una vez por instancia HttpApplication combinada.
Puede echar un vistazo a su ApplicationHost.config
.
maxProcesses
un vistazo a: maxProcesses
debería ser 1.
Parece que su IIS inicia múltiples procesos de trabajo.
Si hay varias aplicaciones de IIS que se dirigen a la misma ruta. Se creará un AppDomain según dicha aplicación IIS si se invoca la aplicación.
Por ejemplo:
Si ambos apuntan a la misma ruta, aún cuentan como dos aplicaciones diferentes y se crearán dos AppDomains.