Exportar (0) Imprimir
Expandir todo

AppDomain (Clase)

Actualización: noviembre 2007

Representa un dominio de aplicación, que es un entorno aislado donde se ejecutan las aplicaciones. Esta clase no se puede heredar.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public sealed class AppDomain : MarshalByRefObject, 
	_AppDomain, IEvidenceFactory
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
/** @attribute ComVisibleAttribute(true) */
public final class AppDomain extends MarshalByRefObject implements _AppDomain, 
	IEvidenceFactory
public final class AppDomain extends MarshalByRefObject implements _AppDomain, IEvidenceFactory

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.

w124b5fa.alert_caution(es-es,VS.90).gifPrecaució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.

TopicLocation
Cómo: Cargar ensamblados en un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Configurar un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Crear un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Descargar un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Configurar un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Cargar ensamblados en un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Crear un dominio de aplicaciónFundamentos de programación en .NET Framework
Cómo: Descargar un dominio de aplicaciónFundamentos de programación en .NET Framework

En este ejemplo se muestra cómo crear un nuevo objeto AppDomain, cómo crear instancias de un tipo en ese nuevo AppDomain y cómo comunicarse con el objeto de ese tipo. Además, en este ejemplo se muestra cómo descargar el objeto AppDomain que provoca que el objeto se recolecte como elemento no utilizado.

using System;
using System.Reflection;
using System.Threading;

class Module1
{
    public static void Main()
    {
        // Get and display the friendly name of the default AppDomain.
        string callingDomainName = Thread.GetDomain().FriendlyName;
        Console.WriteLine(callingDomainName);

        // Get and display the full name of the EXE assembly.
        string exeAssembly = Assembly.GetEntryAssembly().FullName;
        Console.WriteLine(exeAssembly);

        // Construct and initialize settings for a second AppDomain.
        AppDomainSetup ads = new AppDomainSetup();
        ads.ApplicationBase = 
            System.Environment.CurrentDirectory;
        ads.DisallowBindingRedirects = false;
        ads.DisallowCodeDownload = true;
        ads.ConfigurationFile = 
            AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

        // Create the second AppDomain.
        AppDomain ad2 = AppDomain.CreateDomain("AD #2", null, ads);

        // Create an instance of MarshalbyRefType in the second AppDomain. 
        // A proxy to the object is returned.
        MarshalByRefType mbrt = 
            (MarshalByRefType) ad2.CreateInstanceAndUnwrap(
                exeAssembly, 
                typeof(MarshalByRefType).FullName
            );

        // Call a method on the object via the proxy, passing the 
        // default AppDomain's friendly name in as a parameter.
        mbrt.SomeMethod(callingDomainName);

        // Unload the second AppDomain. This deletes its object and 
        // invalidates the proxy object.
        AppDomain.Unload(ad2);
        try
        {
            // Call the method again. Note that this time it fails 
            // because the second AppDomain was unloaded.
            mbrt.SomeMethod(callingDomainName);
            Console.WriteLine("Sucessful call.");
        }
        catch(AppDomainUnloadedException)
        {
            Console.WriteLine("Failed call; this is expected.");
        }
    }
}

// Because this class is derived from MarshalByRefObject, a proxy 
// to a MarshalByRefType object can be returned across an AppDomain 
// boundary.
public class MarshalByRefType : MarshalByRefObject
{
    //  Call this method via a proxy.
    public void SomeMethod(string callingDomainName)
    {
        // Get this AppDomain's settings and display some of them.
        AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
        Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}", 
            ads.ApplicationName, 
            ads.ApplicationBase, 
            ads.ConfigurationFile
        );

        // Display the name of the calling AppDomain and the name 
        // of the second domain.
        // NOTE: The application's thread has transitioned between 
        // AppDomains.
        Console.WriteLine("Calling from '{0}' to '{1}'.", 
            callingDomainName, 
            Thread.GetDomain().FriendlyName
        );
    }
}

/* This code produces output similar to the following: 

AppDomainX.exe
AppDomainX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
AppName=, AppBase=C:\AppDomain\bin, ConfigFile=C:\AppDomain\bin\AppDomainX.exe.config
Calling from 'AppDomainX.exe' to 'AD #2'.
Failed call; this is expected.
 */


Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft