2008-09-18 21 views
44

me siguen dando preguntó acerca de dominios de aplicación en las entrevistas, y I know the basics:buen ejemplo de uso de dominio de aplicación

  • Son un nivel de aislamiento dentro de una aplicación (lo que las diferencia de las aplicaciones)
  • que puede tener hilos (haciendo diferentes de hilos)
  • excepciones en un dominio de aplicación no afectan a otros dominios de aplicación
  • no pueden acceder a la memoria de cada uno
  • cada dominio de aplicación puede tener diferentes seguridad

Aún no obtengo lo que los hace necesarios. Estoy buscando una circunstancia concreta razonable cuando usaría uno.

Respuestas:

  • código no confiable
    • aplicación Core protegida
      plugins no son de confianza/tercera parte son excluidos de memoria compartida corruptor y el acceso no autorizado al registro o disco duro mediante el aislamiento de dominio de aplicación separada con restricciones de seguridad, protegiendo la aplicación o el servidor. p.ej. ASP.NET y SQL Server de alojamiento código de componente
  • código de confianza
    • Estabilidad
      Aplicación segmentado en características seguras, independientes/funcionalidad
    • flexibilidad arquitectónica
      La libertad de ejecutar varias aplicaciones en una sola instancia de CLR o cada programa en sí mismo.

¿Algo más?

Respuesta

49

Probablemente el más común es cargar ensamblajes que contienen código de complemento de partes no confiables. El código se ejecuta en su propio AppDomain, aislando la aplicación.

Además, no es posible descargar un ensamblaje en particular, pero puede descargar AppDomains.

Para el resumen completo, Chris Brumme tenían una entrada de blog masiva en esto:

http://blogs.msdn.com/cbrumme/archive/2003/06/01/51466.aspx

+0

+1 para el enlace al blog de Chris Brumme. Debe leer. – dotnetguy

4

Si crea una aplicación que permite 3 ª parte plug-ins, puede cargar los plug-ins en un AppDomain separado para que su aplicación principal esté a salvo de un código desconocido.

ASP.NET también utiliza AppDomains por separado para cada aplicación web en un solo proceso de trabajo.

4

Los dominios de aplicación son excelentes para la estabilidad de las aplicaciones.

Al hacer que su aplicación consista en un proceso central, que luego genera "características" en appdomains separados, puede evitar un bloqueo global si alguno de ellos se comporta mal.

3

Según tengo entendido, AppDomain's está diseñado para permitir a la entidad de alojamiento (SO, DB, Servidor, etc ...) la libertad de ejecutar múltiples aplicaciones dentro de una sola instancia de CLR o cada programa en sí mismo. Por lo tanto, es un problema para el host en lugar del desarrollador de la aplicación.

Esto se compara favorablemente con Java, donde siempre tiene 1 JVM por aplicación, lo que a menudo resulta en muchas instancias de JVM ejecutándose al mismo tiempo con recursos duplicados.

7

Creo que la principal motivación para tener AppDomains es que los diseñadores de CLR querían una manera de aislar el código administrado sin incurrir en la sobrecarga de rendimiento de múltiples procesos de Windows. Si el CLR se hubiera implementado originalmente sobre UNIX (donde la creación de procesos múltiples es significativamente menos costosa), es posible que AppDomains nunca se haya inventado.

Además, si bien las arquitecturas de plugins gestionadas en aplicaciones de terceros son definitivamente un buen uso de AppDomains, la razón principal por la que existen es para hosts conocidos como SQL Server 2005 y ASP.NET. Por ejemplo, un proveedor de alojamiento ASP.NET puede ofrecer una solución de alojamiento compartido que admita múltiples sitios de múltiples clientes, todo en la misma caja que se ejecuta en un único proceso de Windows.

14

Otro beneficio de AppDomains (como mencionó en su pregunta) es que el código que carga puede ejecutarse con diferentes permisos de seguridad. Por ejemplo, escribí una aplicación que dinámicamente cargó DLL. Yo era instructor y estos eran archivos DLL de estudiantes que estaba cargando. No quería que un estudiante descontento borrara mi disco duro o corrompiera mi registro, así que cargué el código de sus DLL en un AppDomain separado que no tenía permisos IO de archivo o permisos de edición de registro o incluso permisos para mostrar ventanas nuevas (en realidad solo tenía permisos de ejecución).

3

I ver 2 o 3 casos de uso principales para la creación de dominios de aplicación separadas: aislamiento

1) Proceso-como con bajo uso de recursos y los gastos generales. Por ejemplo, esto es lo que hace ASP.NET: hospeda cada sitio web en un dominio de aplicación separado. Si utilizaba diferentes subprocesos en el dominio de aplicación único, el código de diferentes sitios web podría interferir entre sí. Si alojara diferentes sitios web en diferentes procesos, usaría muchos recursos y también la comunicación entre procesos es relativamente difícil en comparación con la comunicación en proceso.

2) Ejecutando código que no es de confianza en un dominio de aplicación separado con permisos de seguridad particulares (esto en realidad está relacionado con el 1er motivo). Como ya se ha dicho, puede cargar plugins de terceros o dlls que no sean de confianza en dominios de aplicaciones separados.

3) Posibilidad de descargar ensamblajes para reducir el uso innecesario de memoria. Desafortunadamente, no hay forma de descargar un ensamblaje desde un dominio de aplicación. Por lo tanto, si carga un ensamblaje grande en el dominio principal de la aplicación, la única forma de liberar la memoria correspondiente después de que el ensamblaje ya no sea necesario es cerrar su aplicación. Cargar ensamblajes en un dominio de aplicación separado y descargar ese dominio de aplicación cuando esos ensambles ya no son necesarios es una solución a este problema.

Cuestiones relacionadas