Los dominios de aplicación, representados por los objetos AppDomain, ayudan a proporcionar aislamiento, descarga y límites de seguridad para ejecutar el código administrado.
-
Utilice los dominios de aplicación para aislar tareas que podrían derrumbar un proceso. Si el estado del objeto AppDomain que está ejecutando una tarea se vuelve inestable, el objeto AppDomain se puede descargar sin afectar al proceso. Es importante cuando un proceso debe ejecutarse durante largos períodos sin reiniciar. También puede utilizar los dominios de aplicación para aislar tareas que no deberían compartir datos.
-
Si se carga un ensamblado en el dominio de aplicación predeterminado, no se podrá descargar de la memoria mientras el proceso se esté ejecutando. Sin embargo, si se abre un segundo dominio de aplicación para cargar y ejecutar el ensamblado, éste se descarga cuando se descarga ese dominio de aplicación. Utilice esta técnica para minimizar el espacio de trabajo de los procesos de ejecución larga que en ocasiones utilizan grandes archivos DLL.
Varios dominios de aplicación pueden ejecutarse en un único proceso; sin embargo, no existe una correlación uno a uno entre los dominios de aplicación y los subprocesos. Varios subprocesos pueden pertenecer a un solo dominio de aplicación y, aunque un subproceso determinado no esté confinado en un único dominio de aplicación, en un momento dado, un subproceso se ejecuta en un solo dominio de aplicación.
Los dominios de aplicación se crean mediante el método CreateDomain. Las instancias de AppDomain se utilizan para cargar y ejecutar ensamblados (Assembly). Cuando un AppDomain deja de utilizarse, puede descargarse.
La clase AppDomain implementa un conjunto de eventos que permiten a las aplicaciones responder cuando se cargue un ensamblado, se descargue un dominio de aplicación o se produce una excepción no controlada.
Para obtener más información acerca del uso de los dominios de aplicación, vea Dominios de aplicación.
Esta clase implementa las interfaces MarshalByRefObject, _AppDomain y IEvidenceFactory.
No se debe crear nunca un contenedor utilizable en modo remoto para un objeto AppDomain. Si se hace, se puede publicar una referencia remota a ese objeto AppDomain y dejar expuestos métodos como CreateInstance para el acceso remoto, destruyendo así la seguridad de acceso a código de dicho objeto AppDomain. Al conectarse al objeto AppDomain remoto, los clientes malintencionados podrían obtener acceso a cualquier recurso al que tenga acceso el propio objeto AppDomain. No cree contenedores utilizables de manera remota para ningún tipo que extienda MarshalByRefObject y que implemente métodos que puedan utilizar los clientes maliciosos para eludir el sistema de seguridad.
Precaución |
|---|
| El valor predeterminado de la propiedad AppDomainSetup.DisallowCodeDownload es false. Este valor no es seguro para los servicios. Para evitar que los servicios descarguen código de confianza parcial, establezca esta propiedad en true. |
Nota de la plataforma Windows Mobile para Pocket PC,
Windows Mobile para Smartphone,
Windows CE:
No se admite la carga de ensamblados en una zona de código neutral de dominio para que los utilicen varios dominios de aplicación.