¿Qué es un dominio de aplicación .NET?

83

En particular, ¿cuáles son las implicaciones de ejecutar código en dos dominios de aplicación diferentes?

¿Cómo se transmiten normalmente los datos a través del límite del dominio de la aplicación? ¿Es lo mismo que pasar datos a través de los límites del proceso? Tengo curiosidad por saber más sobre esta abstracción y para qué es útil.

EDITAR: Buena cobertura existente de la clase AppDomain en general en No entiendo Application Domains

Luke
fuente
3
La primera parte es un duplicado de stackoverflow.com/questions/622516/i-dont-understand-appdomains . Quizás la pregunta debería editarse para que se trate de pasar datos.
John Saunders
Vaya, me perdí ese. Esto se puede cerrar.
Luke

Respuestas:

78

Un AppDomain básicamente proporciona una región aislada en la que el código se ejecuta dentro de un proceso.

Una forma fácil de pensar en ello es casi como un proceso más liviano dentro de su proceso principal. Cada AppDomain existe dentro de un proceso en completo aislamiento, lo que le permite ejecutar el código de forma segura (se puede descargar sin destruir todo el proceso si es necesario), con seguridad separada, etc.

En cuanto a sus detalles, si ejecuta código en 2 AppDomains diferentes dentro de un proceso, el código se ejecutará de forma aislada. Cualquier comunicación entre AppDomains se serializará o se manejará a través de MarshallByRefObject. Se comporta de manera muy similar a usar la comunicación remota a este respecto. Esto proporciona una gran cantidad de seguridad: puede ejecutar código en el que no confía y, si hace algo mal, no lo afectará.

Hay muchos más detalles en la descripción de dominios de aplicación de MSDN .

Reed Copsey
fuente
¿Puede aclarar lo que quiere decir con "si hace algo mal"?
Luke
11
Un ejemplo: si tiene un hilo sin controlar en un grupo de hilos, destruirá el dominio de la aplicación. Normalmente, esto matará su proceso, lo cual es peligroso si está cargando un código de usuario o un complemento. Ejecutar en un dominio de aplicación separado significa que puede manejar eso mucho mejor: si el segundo dominio de aplicación tiene que ser derribado, puede manejarlo sin destruir su proceso.
Reed Copsey
20

Es una capa de aislamiento proporcionada por el tiempo de ejecución de .NET. Como tal, los dominios de aplicaciones conviven en un proceso (un proceso puede tener muchos dominios de aplicaciones) y tienen su propio espacio de direcciones virtuales.

Los dominios de aplicaciones son útiles porque:

  • Son menos costosos que los procesos completos
  • Son multiproceso
  • Puedes detener uno sin matar todo en el proceso.
  • Segregación de recursos / config / etc
  • Cada dominio de aplicación se ejecuta en su propio nivel de seguridad
nikmd23
fuente
1

Si lo mira desde la perspectiva de los detalles internos del procesador, establece un valor diferente para el registro de segmento de código (CS). y el registro CS: IP (Instruction Pointer) es el que está en ejecución por el procesador.

(Elegí hojear la discusión relacionada con la tabla de la página por brevedad).

AppDomain marca este límite. para la seguridad del código.

La razón para dar este trasfondo es para salirse con la pregunta de este tipo: 1. ¿Cómo podemos acceder a los recursos a través de dos dominios de aplicaciones (sí, usando tuberías o algún otro mecanismo de intercambio no directamente como CS: IP no se puede configurar en algún otro dominio de aplicación? Es solo el sistema operativo el que puede hacerlo. No el CLR)

  1. ¿Podría haber varios subprocesos en el dominio de la aplicación? Técnicamente, sí, ya que el valor de CS estará en el proceso actual. puede cambiar la IP a otra cosa mediante una declaración de salto (combinación de llamada de función / goto)

  2. ¿Pueden comunicarse dos subprocesos en dos dominios de aplicaciones diferentes (No. consulte el punto 1.)

  3. ¿Pueden comunicarse dos subprocesos en el dominio de una sola aplicación (Sí, consulte el punto 2)

varias otras combinaciones de estos casos podrían responderse con poco conocimiento de cómo funciona CS: IP.

Ziaullah Khan
fuente
0

Cada aplicación que se ejecuta dentro de un proceso, AppDomain también es un proceso liviano o podemos decir unidad lógica que tiene un grupo de ensamblajes (este es un contenedor que contiene un grupo de ensamblajes) y esto existe dentro del proceso en el nivel de aislamiento del mismo proceso , esto permite ejecutar múltiples ensamblajes dentro del mismo proceso y evitar su acceso directo.

Ejecución de la aplicación Dot Net dentro de AppDomain: Una vez que se ejecuta cualquier aplicación dot net, el shell del sistema operativo carga CLR en un proceso y se crea un nuevo AppDomain en el mismo proceso y carga todos los ensamblados en el AppDomain creado, ahora desde el código de AppDomain se ejecutará.

Cuándo personalizar AppDomain: Podemos crear nuestro propio AppDomain, ahora la cuestión es en qué escenario podemos crear nuestro propio AppDomain. Supongamos que en tiempo de ejecución necesitamos agregar o eliminar los ensamblados sin interrumpir la aplicación en ejecución, luego podemos crear nuestro propio AppDomain.

Afazal
fuente