Estrutura de configuração
Os arquivos de configuração do ASP.NET são chamados de arquivos Web.config e podem aparecer em vários diretórios em um aplicativo ASP.NET. A hierarquia de configuração do ASP.NET possui as seguintes características:
Use um arquivo de configuração que se aplica aos recursos no diretório no qual o arquivo de configuração está localizado e a todos os seus subdiretórios.
Permite colocar dados de configuração em um local que lhes dará o escopo apropriado (o computador inteiro, todos os aplicativos Web, um único aplicativo ou um subdiretório dentro desse aplicativo).
Permite substituir definições de configuração herdadas de níveis superiores na hierarquia de configuração. Também permite bloquear definições de configuração para evitar que sejam substituídas por definições de configuração de nível inferior.
Organize grupos lógicos de definições de configuração em seções.
Herança de configuração
Todos os aplicativos .NET Framework herdam configurações básicas e padrões de um arquivo chamado systemrootMicrosoft .NETFrameworkversionNumberCONFIGMachine.config. O arquivo Machine.config é usado para definições de configuração no nível do servidor. Algumas dessas configurações não podem ser substituídas em arquivos de configuração localizados mais abaixo na hierarquia.
Os aplicativos cliente .NET (aplicativos de console e Windows) usam um arquivo de configuração chamado ApplicationName.config para substituir as configurações herdadas. Os aplicativos ASP.NET usam um arquivo de configuração chamado Web.config para substituir as configurações herdadas.
A raiz da hierarquia de configuração do ASP.NET é um arquivo chamado arquivo Web.config raiz, que está localizado no mesmo diretório que o arquivo Machine.config. O arquivo Web.config raiz herda todas as configurações do arquivo Machine.config. O arquivo Web.config raiz contém configurações que se aplicam a todos os aplicativos ASP.NET que executam uma versão específica do .NET Framework. Como todo aplicativo ASP.NET herda configurações padrão do arquivo Web.config raiz, você só precisa criar arquivos Web.config para configurações que substituem as configurações padrão.
Herança em elementos de coleção
Alguns elementos de configuração são coleções, por exemplo, o elemento namespaces e o elemento customErrors.
Em uma coleção, as definições de configuração geralmente são adicionadas à coleção por meio do elemento add child, removidas pelo nome da chave por meio do elemento remove child, ou toda a coleção pode ser limpa por meio do elemento clear child. A menos que sejam permitidas duplicatas, as configurações adicionadas em um perfil filho substituirão as configurações com o mesmo nome de chave no perfil pai.
Observe
que algumas coleções que existiam em versões anteriores do .NET Framework usavam nomes de elementos diferentes para adicionar elementos filhos. Por exemplo, o elemento customErrors usa o elemento filho error para adicionar erros personalizados à coleção.
Se uma solicitação for recebida para um arquivo que não existe no diretório SubDir1, o ASP.NET começará a pesquisar a hierarquia de configuração e iniciará a partir do arquivo Web.config mais local (se existir, pode estar no diretório atual ou pode estar no diretório atual). O ASP.NET pesquisará o elemento de erro (esquema de configurações do ASP.NET) de customErrors por um atributo statusCode igual a "404". Depois que o ASP.NET encontra um erro 404 nas definições de configuração, a URL no atributo de redirecionamento é retornada como resposta.
Escopo das definições de configuração
As definições de configuração têm escopos diferentes - algumas têm escopo global e outras são válidas apenas para o escopo do aplicativo (arquivo Web.config raiz ou arquivo Machine.config).
O escopo de uma seção de configuração é definido para todas as seções contidas no ASP.NET no atributo permitirDefinition do elemento da seção configSections (esquema de configurações gerais) no arquivo Machine.config. Por exemplo, o elemento de autenticação (esquema de configurações do ASP.NET) possui o atributo allowDefinition do elemento MachineToApplication. Isso significa que o elemento de autenticação pode ser definido no arquivo Machine.config de nível de aplicativo, no arquivo Web.config raiz e no arquivo Web.config. Se for definido no nível do subdiretório, um erro será gerado. Se o atributo permitirDefinition não estiver definido para uma seção, o valor padrão será Everywhere.
O escopo das definições de configuração para cada elemento nas definições de configuração do ASP.NET e nas definições de configuração geral (ASP.NET) está listado ao lado de Configurável na tabela Informações do Elemento.
A tabela a seguir lista o nível de cada arquivo na hierarquia de configuração, o nome de cada arquivo e uma descrição das características herdadas importantes de cada arquivo.
Nível de configuração | Nome do arquivo | Descrição do arquivo |
Servidor | Machine.config | O arquivo Machine.config contém o esquema ASP.NET para todos os aplicativos Web no servidor. Este arquivo está no nível superior da hierarquia de mesclagem de configuração. |
Web.config | raiz | é armazenado no mesmo diretório que o arquivo Machine.config e contém valores padrão para a maior parte da seção de configuração system.web. No tempo de execução, esse arquivo é mesclado do segundo nível a partir do topo da hierarquia de configuração. |
Site | Web.config | O arquivo Web.config de um site específico contém configurações que se aplicam a esse site e são herdadas por todos os aplicativos ASP.NET e subdiretórios desse site. |
Web.config | raiz do aplicativo ASP.NET | O arquivo Web.config para um aplicativo ASP.NET específico está localizado no diretório raiz do aplicativo. Ele contém a configuração. |
Subdiretório de aplicativo ASP.NET | Web.config | O arquivo Web.config de um subdiretório de aplicativo contém configurações que se aplicam a esse subdiretório e são herdadas para baixo em todos os subdiretórios em suas ramificações. |
Diretório de aplicativos clientes | ApplicationName.config O arquivoApplicationName.config | contém configurações para aplicativos cliente Windows (não aplicativos Web). |
Elemento ProcessModel
O elemento processModel (esquema de configurações do ASP.NET) configura o modelo de processamento usado para o servidor (incluindo todos os aplicativos ASP.NET no servidor). Portanto, as configurações do processModel só podem ser colocadas no arquivo Machine.config e não podem ser substituídas pelas configurações em qualquer arquivo Web.config.
As alterações no elemento processModel só terão efeito depois que o processo de trabalho for reiniciado, e não imediatamente após definir as alterações como outros elementos de configuração.
Observação
Quando o ASP.NET é executado no Internet Information Services (IIS) 6.0 no modo de isolamento do processo de trabalho, o modelo de processo do IIS 6.0 é usado e a configuração na seção processModel do arquivo Machine.config é ignorada. Para configurar a identidade do processo, round-robin ou outros valores de modelo de processo, use o Gerenciador do IIS para configurar o processo de trabalho do IIS do aplicativo.
Cálculo em tempo de execução das definições de configuração
Quando o servidor recebe uma solicitação para um recurso da Web específico, o ASP.NET calcula hierarquicamente as definições de configuração desse recurso usando todos os arquivos de configuração localizados no caminho do diretório virtual da URL solicitada. As definições de configuração local substituem as definições no arquivo de configuração pai.
Essas configurações são calculadas uma vez e armazenadas em cache para solicitações subsequentes. O ASP.NET monitora automaticamente as alterações em um arquivo e recalcula o cache quando qualquer arquivo de configuração na hierarquia do arquivo é alterado. Quando o servidor recebe uma solicitação de uma URL específica, o ASP.NET usa a hierarquia de definições de configuração no cache para localizar o recurso solicitado.
A menos que o atributo restartOnExternalChanges="false" esteja incluído no elemento da seção de configuração ou as definições de configuração estejam contidas em um arquivo separado vinculado ao arquivo Web.config usando o atributo configSource, o aplicativo será reiniciado quando a configuração for alterada.
Vários recursos ASP.NET configurados em um único arquivo
Armazenar configurações para vários locais em um único arquivo Web.config pode ser útil ao gerenciar um grande número de definições de configuração ou ao gerenciar sites de clientes em uma configuração de ISP. Usando o atributo path do elemento location, você pode configurar vários recursos ASP.NET específicos armazenados no subdiretório do aplicativo.
Para obter informações sobre como usar o elemento location, consulte Como configurar um diretório específico usando configurações de local.
As configurações em diretórios virtuais entram em conflito com as configurações em diretórios físicos
As configurações de diretórios virtuais são independentes da estrutura de diretórios físicos e os diretórios virtuais devem ser organizados cuidadosamente para evitar problemas de configuração. Por exemplo, você pode ter um arquivo ASP.NET chamado MyResource.aspx com a seguinte estrutura de diretório físico.
C:
Subdir1
Subdir2
MyResource.aspx
Além disso, você pode ter um arquivo de configuração localizado em Subdir1, um diretório virtual denominado Vdir1 mapeado para c:Subdir1 e um diretório virtual denominado Vdir1 mapeado para c:Subdir1Subdir2 O diretório virtual diretório de Vdir2. Se um cliente usar a URL http://localhost/vdir1/subdir2/MyResource.aspx para acessar um recurso localizado fisicamente em c:Subdir1Subdir2MyResource.aspx, o recurso herdará as definições de configuração de Vdir1. No entanto, se um cliente acessar o mesmo recurso usando a URL http://localhost/vdir2/MyResource.aspx, o recurso não herdará as configurações de Vdir1. A criação de diretórios virtuais dessa maneira pode causar resultados inesperados ou até mesmo causar falha no aplicativo. É recomendável não aninhar diretórios virtuais e, se necessário, usar apenas um arquivo Web.config.
Limitando a herança do ASP.NET
Talvez você queira limitar a herança das definições de configuração para aprimorar o desempenho do aplicativo, manter a alta confiabilidade e simplificar a administração. A funcionalidade de restrição é controlada pelas propriedades allowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem e lockElements. Consulte msdn para obter mais informações sobre essas propriedades.