2009-07-07 41 views
73

En particular, ¿cuáles son las implicaciones de ejecutar código en dos dominios de aplicación diferentes?¿Qué es un dominio de aplicación .NET?

¿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.

EDIT: buena cobertura existente de la clase dominio de aplicación, en general, en I don't understand Application Domains

+3

La primera parte es un duplicado de http://stackoverflow.com/questions/622516/i-dont-understand-appdomains. Tal vez la pregunta deba ser editada para que sea sobre pasar datos. –

+0

Woops, se perdió ese. Esto puede ser cerrado. – Luke

Respuesta

69

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 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 código de forma segura (puede descargarse sin demoler todo el proceso si es necesario), con seguridad por separado, 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 Application Domains.

+0

¿Puedes aclarar a qué te refieres con "si hace algo mal"? – Luke

+8

Un ejemplo: si tiene un hilo no administrado en un threadpool, 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 manejar eso sin demoler su proceso. –

18

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.

dominios de la aplicación son útiles porque:

  • Ellos son menos costosos que los procesos completos
  • Son multiproceso
  • Usted puede detener a uno sin matar todo en el proceso de
  • La segregación de los recursos/config/etc
  • Cada dominio de aplicación se ejecuta en su propio nivel de seguridad
0

Cada aplicación que se ejecuta dentro de un proceso, AppDomain es también 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 conjuntos múltiples dentro del mismo proceso y evitar que tengan acceso directo.

ejecuta la aplicación de Dot Net Dentro de dominio de aplicación: Una vez que cualquier carrera de puntos de aplicación de red, operación shell del sistema CLR carga en un proceso y un nuevo dominio de aplicación fueron creados en el mismo proceso y la carga de todas las asambleas en el dominio de aplicación creado, ahora desde el código AppDomain se ejecutará.

Cuando al dominio de aplicación personalizada: Podemos crear propio dominio de aplicación, ahora la cosa es en qué escenario podemos crear propio dominio de aplicación. 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.

1

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

(He escogido revisar la tabla relacionada con la tabla de páginas para mayor brevedad).

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

La razón para dar este fondo es de salirse con la cuestión de este tipo: 1. ¿Cómo podemos acceder a recursos a través de dos dominios de aplicaciones (sí mediante tuberías o algunos otros mechanis compartir no directamente como CS: IP no puede ser ajustado a algún otro dominio de aplicación. es sólo el sistema operativo que puede hacerlo. No es la CLR)

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

  2. puede comunicar dos hilos en dos dominios aplicación diferente (núm punto de referencia 1.)

  3. pueden los dos hilos en una sola aplicación de dominio de comunicación (Sí. punto de referencia 2)

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

Cuestiones relacionadas