Criando e configurando os domínios de aplicativo
Depois de um host determinou onde estão os limites de domínio, com base nos critérios descritos na seção anterior, o host usa a CreateDomain método o System.AppDomain tipo para criar domínios no qual executar o código do usuário. Cada domínio de aplicativo contém uma coleção de pares nome/valor, na qual um host pode armazenar informações sobre um domínio. Os pares nome/valor são passados como um parâmetro para CreateDomain.
A.NET Framework define várias propriedades que são compreendidos nativamente pelo runtime. Os nomes dessas propriedades são definidos pelas seqüências estáticas na classe System. AppDomain. Um host pode definir as propriedades de nativamente compreendidas para personalizar o domínio do aplicativo. Por exemplo, essas propriedades podem controlar a maneira na qual o código em execução em domínios diferentes é isolado. Os pares nome/valor podem ser estendidos para que os hosts podem definir propriedades personalizadas, na qual eles podem armazenar informações específicas para seu cenário.
Em geral, o isolamento fornecido pelos domínios de aplicativo apresenta duas formas:
Domínios de aplicativo impede que o código em execução em um domínio do aplicativo afetem outros domínios, impedindo que os tipos em um domínio vejam e tipos de chamada em outros domínios. Domínios de aplicativos dependem do fato de que o código foi verificado para se proteger contra falhas de memória.
Os controles de host onde o runtime localiza o código para carregar em um domínio de aplicativo específico em seu nome. Isso é importante porque impede que o código de um aplicativo de inadvertidamente afetar outros aplicativos. A capacidade de solicitações de escopo para carregar o código dessa maneira difere significativamente a maneira na qual Microsoft Win32 e COM atualmente trabalham. Atualmente, no Windows, o escopo de resolução é todo o computador porque qualquer aplicativo pode usar qualquer código descrito no registro ou colocado em um local conhecido como, por exemplo, o diretório de sistema do Windows. Compartilhamento dessa maneira é atualmente o padrão e esse comportamento contribui para conflitos de DLL.
Para além de estabelecer um escopo para a maneira na qual o código é ser carregado, também é importante para as informações de configuração de escopo para um aplicativo. No entanto, isso não é possível atualmente muitas definições de configuração.
Por exemplo, se você configurar um computador remoto no qual executar uma classe COM, a configuração o RemoteServerName chave no registro para uma determinada classe afeta todos os aplicativos que usam essa classe. Semelhante ao compartilhamento não intencionais de código, o compartilhamento indesejado de dados de configuração impede que um aplicativo controlar completamente o seu próprio comportamento.
O AppDomainSetup.ApplicationBase e AppDomainSetup.ConfigurationFile Propriedades, respectivamente, controlam a capacidade de especificar os diretórios em que o runtime procura por módulos (assemblies) e escopos as definições de configuração para um domínio de aplicativo específico por.
ApplicationBaseestabelece um diretório raiz para o domínio de aplicativo, sob a qual o runtime procura conjuntos privados. Se um host permite que os assemblies sejam carregados do disco, deve fornecer um ApplicationBase para que o tempo de execução saiba onde procurar por assemblies carregados.
O ConfigurationFile propriedade especifica o nome de um arquivo XML que contém as configurações usadas para configurar o aplicativo em execução no domínio de aplicativo. Regras de versão do assembly e instruções para localizar os tipos que podem ser acessados remotamente por tipos em execução no domínio do aplicativo são exemplos de configurações no arquivo de configuração do aplicativo.
Para obter descrições das outras propriedades disponíveis para configurar um domínio de aplicativo, consulte a documentação para o AppDomain classe.
Observação de segurançao valor padrão para o AppDomainSetup.DisallowCodeDownload é a propriedade false. Essa configuração não é segura para serviços. Para ajudar a impedir que serviços fazendo o download de código parcialmente confiável, defina esta propriedade como true.