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


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

¿Cómo se pasan normalmente los datos a través del límite del dominio de la aplicación? ¿Es lo mismo que pasar datos a través del límite 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 los dominios de aplicaciones


74
2017-07-07 19:55


origen


Respuestas:


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

Una manera fácil de pensar es casi como un proceso más liviano dentro del proceso principal. Cada AppDomain existe dentro de un proceso en completo aislamiento, lo que le permite ejecutar código de forma segura (puede descargarse sin demoler 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 los AppDomains se serializará o manejará a través de MarshallByRefObject. Se comporta de manera muy parecida 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íe, y si hace algo mal, no lo afectará.

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


69
2017-07-07 20:00



Es una capa de aislamiento proporcionada por .NET runtime. Como tal, los dominios de la aplicación viven en un proceso (1 proceso puede tener muchos dominios de aplicación) y tienen su propio espacio de direcciones virtuales.

Los dominios de la aplicación son útiles porque:

  • Son menos costosos que los procesos completos
  • Ellos son multiproceso
  • Puede 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

18
2017-07-07 20:03



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

(He elegido analizar la discusión relacionada con la tabla de páginas para abreviar).

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

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

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

  2. ¿Pueden comunicarse dos hilos en dos dominios de aplicaciones diferentes? (no, refiérase al punto 1)

  3. ¿Pueden comunicarse dos hilos en el dominio de aplicación única? (Sí. punto de referencia 2)

varias otras combinaciones de estos casos podrían ser respondidas por poco conocimiento de cómo funciona CS: IP.


1
2018-02-26 08:10



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 a nivel de aislamiento del mismo proceso , esto permite ejecutar varios ensambles dentro del mismo proceso y evitar que tengan 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 AppDomain se ejecutará.

Cuándo hacer un dominio de aplicación personalizado: Podemos crear nuestro propio AppDomain, ahora la cosa es en qué escenario podemos crear nuestro propio AppDomain. Supongamos que el tiempo de ejecución necesitamos agregar o eliminar los ensamblajes sin interrupción de la aplicación en ejecución, entonces podemos crear un propio dominio de aplicación.


0
2017-09-18 12:23