Desenvolvimento - ASP. NET

.NET: Entendendo o arquivo Web.config

O Web.config é um grande aliado para os programadores ASP.NET, conhecer seus recursos é fundamental para a criação de aplicações robustas. O artigo trata sobre a estrutura básico do arquivo e como usar os métodos para leitura/escrita no mesmo.

por Andrews Ferreira Bárbara



O ASP.NET possui inúmeros recursos que o desenvolvedor pode estar usando em suas soluções, desde métodos de autenticação variados, até monitoramento de performance e escalabilidade. Apesar dessas serem funcionalidades bastante abrangentes, com vários conceitos e técnicas, é muito simples interagir com elas, as configurando ou até criando seus próprios recursos. Para isso, usamos o Web.config.

Obs: Não é absolutamente requerido que você acrescente esse arquivo no seu projeto. Dentro da pasta do framework .NET, no Windows/System32, existe um arquivo chamado machine.config que define as configurações padrão. Implemente o Web.config apenas se desejar que sua aplicação assuma comportamentos específicos, ou, caso precise guardar algum valor necessário no seu projeto.

O Web.config é uma orientação para determinada aplicação ASP.NET ser configurada. Não se engane, a extensão .config é apenas uma nomenclatura, este é apenas um arquivo XML que pode ser alterado em qualquer editor de textos, bastando que se conheça as tags a serem usadas.

Veja seguir como é a estrutura de um arquivo web.config:

<?xml version="1.0"?>

<configuration>

<appSettings/>

<connectionStrings/>

<system.web>

<compilation debug="false" />

<authentication mode="Windows" />

</system.web>

</configuration>

Existem vários pontos a serem observados. A principal característica é a estrutura XML, familiar para alguns, desconhecida para outros. Se você já trabalhou com tags, em HTML por exemplo, deve ter facilidade em enchegar algumas caractériscas superficiais, se não, recomendo que estude o básico sobre linguagens de marcação antes de partir para o web.config.

Tomando como base que você consiga enxegar e diferenciar as tags, vamos analizar cada linha e ver qual o seu objetivo.

<?xml version="1.0"?> - Responsável pela padronização do arquivo, o atributo version especifica qual a versão do xml usada.

<configuration> - Raiz do arquivo web.config. Todas as configurações devem estar dentro desta tag.

<appSettings/> - Tag que serve como container para as configurações especificas a sua aplicação, no caso, as configurações que o desenvolvedor quiser armazenar. Veremos ela com mais detalhes mais adiante.

<connectionStrings/> - Tag responsável por guardar as connectionstrings(parâmetros de conexão com o banco de dados) usados na sua aplicação.

<system.web> - Guarda as orientações a serem usadas pelo .NET.

<compilation debug="false" /> - Tag filha de <system.web>. Responsavel por definir as configurações de compilação do aplicativo ASP.NET. O atributo de debug especifica se as opções de depuração estarão ativas.

Recomendação: Quando estiver desenvolvendo, é comum que a sua IDE coloque essa opção como true, para poder usar todas os recursos de depuração, porém, é altamente recomendável que quando for distribuir sua aplicação, coloque o atributo debug como false, isso tornará a sua aplicação mais rápida, pois não precisará carregar esses recursos.

<authentication mode="Windows" /> - Define as configuração de autenticação.

Obs: Alguns devem estar estranhando o fato de algumas tags serem abertas e depois fechadas depois do seu conteudo ( <> </> ), outras, apresentam apenas a abertura seguida de uma barra (</>). È um conceito bem simples. No Web.config usamos os atributos como container para as configurações, ou seja, abrimos e fechamos somente quando estas tiverem tags filhas, caso contrario, usamos usamos o terminador / para fecha-la.

Para exemplificar um dos usos do arquivo, vamos inplementar uma configuração personalizada. O mais comum quando desenvolvedores decidem criar configuraçõe próprias, é usar a seção <appSettings> como base, para isso usamos a tag filha <add/> para guardar informações na sessão.

<?xml version="1.0"?>

<configuration>

<appSettings>

<add key=”conf1” value=”teste”/>

<appSettings/>

<connectionStrings/>

<system.web>

<compilation debug="false" />

<authentication mode="Windows" />

</system.web>

</configuration>

Note que a tag <appSettings/>, nesse caso possui uma abertura e um fechamento, pois acrescentamos uma tag filha, que corresponde a nossa configuração. Os atributos de <add/> usados foram key e value, sendo que key define o nome da configuração e value o valor que ela armazena.

Vendo dessa forma se torna bem mais simples de enteder, pois podemos entender as tags <add/> como váriveis externas a nossa aplicação, no qual podemos capturar seus valores e usa-los como bem entender, sem nos preocupar-mos em acrescenta-los na codificação do programa.

Agora que criamos o nosso atributo de configuração, vamos ver como acessa-lo usando a sua IDE ASP.NET.

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Web.Configuration;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Response.Write(

WebConfigurationManager.AppSettings["conf1"].ToString()

);

}

}

Existem apenas 2 linhas a serem analizadas aqui, o resto é apenas o básico de ASP.NET. São elas:

using System.Web.Configuration; - Namespace que guarda as classes que implementam atributos e métodos para interação com o Web.config.

Obs: No exemplo eu usei o namespace System.Web.Configuration, mas também poderia ser usado o System.Configuration, no entanto, este não é o mais indicado para trabalhar com o Web.config.

ConfigurationManager.AppSettings["conf1"].ToString() - Acessando o objeto ConfigurationManager podemos ter acesso aos atributos do Web.Config, todos eles. Os mais básico de serem acessados são o AppSettings e o connectionStrings, pois são implementados como atributos do objeto ConfigurationManager, no caso dos outros, é preciso usar o método getsection(). Note que o atributo AppSettings é um vetor, nele contém todas as especificações das tags <add/>, sendo que acessamos os valores (atributo value) pela posição dela no vetor (atributo key) .

Pronto, implementamos um arquivo de configuração básico acessado por uma página ASP.NET sem muitas complicações. Agora é só usar a criatividade. Conhecer esses pontos já da asas ao desenvolvedor, porque mesmo sendo conceitos básicos, dão um lugar a mais para interagir com dados sem a necessidade de acrescentar código no projeto, tornado-o mais padronizado, e também, mais facil de dar manutenção.

Tudo bem...Você seguiu o artigo e teve algum problema? Fique atento as essas regras.

O Web.config distingue maiusculas e minúsucas, portante, preste bem atenção nos detalhes.

Sempre que adicionar um namespace ao seu projeto, como o System.Web.Configuration, verifique se a referencia dele foi devidamente acrescentada ao projeto, caso não seja, trate de acrescenta-la, ou você corre o risco da sua IDE não reconhecer alguns objetos durante a compilação.

O Web.config é um arquivo de natureza “read-only”, ou seja, você só terá acesso a leitura dele quando estiver acessando-o via código na sua aplicação. Existem formas de se contornar isso, porém, é muito importante ter um pouco de prática para não se avariar o arquivo, digo isso pois o Web.config é vital para a sua aplicação, se por algum motivo ele não estiver correto, as configurações prevalecentes passaram a ser as do machine.config, ou a de um Web.config que esteja em um diretório superior ao da aplicação, o que pode mudar o comportamento das suas rotinas dependendo da forma como o você as implementou.

Para conseguir fazer auterações no arquivo o Web.conf, ou melhor, em qualquer arquivo de configuração do framework .NET, é necessário instanciar um objeto Configuration contido no namespace System.Configuration. Esse objeto guarda toda a estrutura de um arquivo de configuração qualquer, seja Web.config ou qualquer outro.A partir daí, usamos esse objeto para fazer todas as modificações necessárias ao invés de interargirmos diretamente com o WebConfigurationManager. Quando precisar que as alterações feitas no objeto Configuration reflitam no Web.config real, use o método Save(). Veja o exemplo:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Web.Configuration;

using System.Configuration;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Configuration CONFIG =

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

CONFIG.AppSettings["conf1"] = "ALTERANDO...";

CONFIG.Save(ConfigurationSaveMode.Modified);

Response.Write(WebConfigurationManager.AppSettings["conf1"].ToString());

}

}

Configuration CONFIG =

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); - Nessa linha estamos istanciando um objeto Configuration a partir das informações do Web.config ligado a aplicação ASP.NET em questão.

CONFIG.AppSettings["conf1"] = "ALTERANDO..."; - Atribuição de um valor para uma das configurações armazadas no nosso objeto.

CONFIG.Save(ConfigurationSaveMode.Modified); - Passo mais importante. Usamos o método Save() para refletir as alterações no Web.Config do qual o objeto Configuration recebeu suas informações.

OBS: O atributo ConfigurationSaveMode.Modified serve para o método substituir apenas o que foi modificado no objeto.

A partir daí o céu será o limite, com essas informações é possivel usar o Web.config da forma que desejar. Só tome cuidado para não criar problemas com as configurações principais do ASP.NET.

Simples? Pois é, isso é .NET!!!

Até a próxima!

Andrews Ferreira Bárbara

Andrews Ferreira Bárbara - É técnico em informática com ênfase em programação e internet. Atualmente trabalha como profissional autônomo desenvolvendo soluçõesusando técnologias CodeGear aliadas ao SGBD Firebird.