Web.config e a reinicialização da aplicação

by Israel Aece 12. April 2010 10:29

Recentemente fui questionado sobre a possibilidade de alteração de um arquivo de configuração para a adição de uma nova string de conexão com uma determinada base de dados. Como sabemos, podemos utilizar a seção <connectionStrings /> para isso, onde elencamos todas as conexões que possam ser utilizadas pela aplicação.

O grande problema disso, é que ao modificar o arquivo Web.config, a aplicação é reinicializada, e com isso todas as informações que são armazenadas na memória são perdidas. Isso quer dizer que membros estáticos, variáveis de aplicação, de sessão e caching são descartadas, causando problemas dentro da aplicação, e trazendo péssimas experiências aos usuários.

Para contornar esse problema, podemos recorrer à uma técnica que nos permite isolar as configurações de uma seção inteira em um outro arquivo de configuração. No nosso exemplo, iremos criar um arquivo chamado connectionStrings.config contendo apenas a seção <connectionStrings />, assim como poder notar abaixo:

<connectionStrings>
  <add name="SqlConnectionString" connectionString="..."/>
  <add name="OracleConnectionString" connectionString="..."/>
</connectionStrings>

Já no arquivo de configuração da aplicação, Web.config, referenciamos este arquivo recém criado, e para isso utilizamos o atributo configSource, apontando fisicamente para ele:

<connectionStrings configSource="connectionStrings.config" />

Só que isso somente não resolverá. Como estamos querendo evitar a reinicialização caso alguma alteração na seção <connectionStrings /> aconteça, precisamos definir o atributo restartOnExternalChanges como False, que por padrão é True. Quando é definido como False e temos essa seção em um segundo arquivo, a aplicação não será reinicializada. Essa configuração deve ser aplicada durante a criação da seção, no arquivo machine.config que está localizado dentro do diretório de instalação do .NET Framework. Abaixo temos a seção já configurada com este atributo:

<section
    name="connectionStrings"
    type="System.Configuration.ConnectionStringsSection, ..."
    restartOnExternalChanges="false"
    requirePermission="false" />

Com isso, como já era de se esperar, qualquer mudança que ocorra no arquivo connectionStrings.config não provocará a reinicialização da aplicação, mas as alterações já serão detectadas por ela. O único cuidado que você precisa ter aqui é quando há alguma espécie de caching sendo utilizada pela aplicação ao pelo runtime do ASP.NET, pois as mudanças não irão refletir para a mesma até que ela seja reinicializada. Essa técnica também é válida para seções customizadas.

Tags:

.NET Framework | ASP.NET

Comments

4/12/2010 10:42:56 AM #

pingback

Pingback from topsy.com

Twitter Trackbacks for
        
        Israel Aece | Web.config e a reinicialização da aplicação
        [israelaece.com]
        on Topsy.com

topsy.com

4/12/2010 10:54:58 AM #

Michel Banagouro

Muito bom! Parabéns!
Quando eu tiver um problema desse já saberei resolver =)

Michel Banagouro Brazil

4/12/2010 6:59:12 PM #

Fernando Gonçalves

Boa dica Israel.

Obrigado.

Fernando Gonçalves Brazil

4/14/2010 2:33:50 PM #

Paulo César Viana

Muito interessante. Valeu

Paulo César Viana Brazil

4/14/2010 2:46:57 PM #

hospedagem

Valeu  Israel bela dica.

hospedagem Brazil

5/11/2010 12:36:51 AM #

camisa polo

Boa Israel!
procurava há tempos como fazer..

camisa polo United States

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host