Crear y configurar dominios de aplicación
Cuando un host ha determinado dónde están los límites del dominio, basándose en los criterios descritos en la sección anterior, utiliza el método CreateDomain del tipo System.AppDomain para crear los dominios donde se ejecutará el código de usuario. Cada dominio de aplicación contiene una colección de pares nombre-valor donde un host puede almacenar información acerca de un dominio. Los pares nombre-valor se pasan como un parámetro a CreateDomain.
.NET Framework define varias propiedades que el motor en tiempo de ejecución comprende de manera innata. Los nombres de esas propiedades se definen mediante las cadenas estáticas de la clase System.AppDomain. Un host puede establecer las propiedades que comprende de manera nativa para personalizar el dominio de la aplicación. Por ejemplo, estas propiedades pueden controlar la manera en que se aísla un código que se ejecuta en diferentes dominios. Los pares nombre-valor se pueden extender para que los hosts puedan definir propiedades personalizadas en las que puedan almacenar información específica de su caso.
En general, el aislamiento que proporcionan los dominios de aplicación toma dos formas:
Los dominios de aplicación impiden que el código que se está ejecutando en un dominio afecte a los demás dominios; para ello, evitan que los tipos de un dominio vean y llamen a los tipos de otros dominios. Los dominios de aplicación asumen que se ha comprobado que el código está protegido contra errores de memoria.
El host controla el lugar donde el motor en tiempo de ejecución encuentra el código que se va a cargar en un dominio de aplicación determinado. Esto es importante porque impide que el código de una aplicación afecte accidentalmente a otras aplicaciones. La capacidad para delimitar el ámbito en el que las solicitudes cargarán el código de esta manera varía significativamente respecto a cómo trabajan actualmente Microsoft Win32 y COM. Actualmente, en Windows, el ámbito de resolución es todo el equipo, porque cualquier aplicación puede utilizar cualquier código descrito en el Registro o situado en una ubicación conocida, como el directorio System de Windows. Ésta es la manera de actuar predeterminada, que contribuye a que se produzcan conflictos con las DLL.
Además de establecer un ámbito para la manera en que se carga el código, también es importante establecer el ámbito de la información de configuración de una aplicación. No obstante, actualmente esto no es posible para muchas opciones de configuración.
Por ejemplo, si configura un equipo remoto donde se va a ejecutar una clase COM, el valor de la clave RemoteServerName del Registro para una clase determinada afecta a todas las aplicaciones que utilizan esa clase. De manera similar a compartir código inintencionadamente, compartir datos de configuración inintencionadamente impide que una aplicación controle completamente su comportamiento.
Las propiedades AppDomainSetup.ApplicationBase y AppDomainSetup.ConfigurationFile controlan, respectivamente, la capacidad de especificar los directorios donde el motor en tiempo de ejecución busca ensamblados y establece el ámbito de las opciones de configuración para un dominio de aplicación determinado.
ApplicationBase establece un directorio raíz para el dominio de aplicación donde el motor en tiempo de ejecución busca ensamblados privados. Si un host permite cargar ensamblados de un disco, debe proporcionar una instancia de ApplicationBase para que el motor en tiempo de ejecución sepa dónde debe buscar los ensamblados cargados.
La propiedad ConfigurationFile especifica el nombre de un archivo XML que contiene las opciones empleadas para configurar la aplicación que se está ejecutando en el dominio de aplicación. Algunos ejemplos de las opciones que hay en el archivo de configuración de la aplicación son las reglas e instrucciones de control de versiones de ensamblado para que los tipos que se ejecutan en el dominio de aplicación encuentren los tipos de acceso remoto.
Para obtener una descripción de las demás propiedades que están disponibles para configurar un dominio de aplicación, consulte la documentación de la clase AppDomain.
Nota sobre seguridad El valor predeterminado de la propiedad AppDomainSetup.DisallowCodeDownload es false. Esta configuración no es segura para los servicios. Para ayudar a impedir que los servicios descarguen código de confianza parcial, establezca esta propiedad como true.