terça-feira, 22 de abril de 2008

Page Class - A página do ASP.NET

ASP.NET Modelo de codificação da página web

Uma página ASP.NET consiste em duas partes:

  • Elementos visuais, que inclui marcação específica(server controls ) e html(textos estáticos)
  • Lógica de programação da página, que contêm eventos e outros códigos

Existem dois modelos para gerenciar os elementos visuais e códigos, ambos funcionam da mesma maneira, mas diferenciam em sua utilização: Single File(Arquivo único) e Code Behind.

Single File (Arquivo único)

Neste modelo tanto o visual quanto o código ficam num arquivo único. Isto facilita a manutenção para páginas simples e serviços como renomear arquivos.

Code Behind(Arquivo de código separado)

Neste modelo a parte de código é separado da parte visual. Isto é bastante interessante, pois passamos a ter um controle separado da parte visual e código, facilitando o trabalho entre desenvolvedores e designers.

Page Class

As requisições aos recursos ASP.NET são repassados pelo IIS pelo executor de ASP.NET. Neste momento estou limitando a citar a requisição de páginas, do ASPX.

Ao requisitar uma página, o executor do ASP.NET combina a página, elementos de servidor, como controles, para manipulação de eventos que escrevemos. Como não temos que compilar as páginas em assemblies, netes casos o ASP.NET compila a página na primeira requisição a página. Caso a página ou algum recurso que a página depende sofra alguma alteração a página é recompilada automaticamente.

O ASP.NET pode compilar as páginas previamente para melhorar o desempenho da aplicação: http://msdn2.microsoft.com/en-us/library/399f057w.aspx

Ciclo de vida da página

A página ASP.NET é executada num ciclo de vida que passa por várias etapas. Estas incluem inicialização, instanciar controles, recuperar e manter estado, executar manipuladores de eventos e renderizar. É importante dominar o ciclo de vida da página para utilizar os eventos apropriados quando necessário.

Estágio

Descrição

Solicitação de página

A solicitação de página ocorre antes que o ciclo de vida da página comece. Quando a página é solicitada por um usuário, ASP.NET determina se a página precisa ser analisada e compilada (portanto, começando a vida de uma página) ou se uma versão em cache da página pode ser enviada em resposta sem executar a página.

Iniciar

Na etapa inicial, as propriedades da página, como Request e Response são definidas. Nesse estágio, a página também determina se o Request é um Postback ou um novo Request e define a IsPostBack Propriedade. Além disso, durante a etapa inicial, a propriedade UICulture da página é definida.

Inicialização da página

Durante a inicialização de página, os controles da página estão disponíveis e é definido a propriedade UniqueID de cada controle. Os temas também são aplicados para a página. Se a solicitação atual for um postback, os dados PostBack ainda não foram carregados e valores da propriedade do controle não foram restaurados com os valores do ViewState.

Carga

Durante o carregamento, se a solicitação atual é um postback, as propriedades de controle serão carregadas com informações recuperadas do ViewState e do ControlState.

Validação

Durante a validação, o método Validate de todos os controles de validação são chamados, este define a propriedade IsValid de cada um dos controles validadores da página.

Tratamento de evento PostBack

Se a solicitação for uma postback, quaisquer manipuladores de eventos são chamados.

Renderização

Antes da renderização, o viewstate é salvo para a página e todos os controles. Durante a fase de renderização, a página chamará o método Render para cada controle, fornecendo um escritor de texto que grava a saída para o Stream de saída da propriedade Response da página.

Descarregar

O descarregar é chamado quando a página tiver sido processada, enviada para o cliente e está pronta para ser descarregada. Neste ponto, as propriedades da página, como Response e Request são descarregados e toda limpeza será executada.

Referências:
http://msdn2.microsoft.com/en-us/library/015103yb.aspx
http://msdn2.microsoft.com/en-us/library/ms178138.aspx
http://msdn2.microsoft.com/pt-br/library/ms178472.aspx
http://msdn2.microsoft.com/pt-br/library/aa479007(en-us).aspx

terça-feira, 15 de abril de 2008

ASP.NET server controls – Visão Geral

Os controles de servidor do ASP.NET permitem uma reutilização, maior poder e uso de alto nível de diversas funcionalidades. Apesar de sua utilização, a definição de propriedades e eventos ser fácil como no desenvolvimento winforms, o resultado destes para o navegador será como conteúdos HTML, javascript e estilos.

Estes controles encapsulam serviços como gerenciamento de estado, leitura de dados enviados pelo usuário e em alguns casos adicionam vários recursos para que os controles fiquem com mais funcionalidades e facilidade de uso. Então algumas das funcionalidades que estes controles expõem são:

  • Gerenciamento de estado

  • Acesso simples a valores de objetos, sem a necessidade de usar o objeto Request

  • Possibilidade de programar eventos

  • Retorno para o cliente customizado baseado nas características do navegador.

Além disso é possível criar controles customizados e de usuários.

Hierarquia de controles

Todos controles ASP.NET descendem de forma direta ou indireta do System.Web.UI.Control. Veja na Imagem 1:



Imagem 1 - Hierarquia de Controles ASP.NET

Como é possível na Imagem 1 até a classe Page, que representa a página do ASP.NET indiretamente descende de System.Web.UI.Control

Existem duas hierarquias fundamentais de controles de servidor ASP.NET. HTML Controls, Imagem 2 e Web Controls, Imagem 3.






Imagem 2 - Hierarquia de Controles Html






Imagem 3 - Hierarquia de Controles Web

Divisão por usabilidade

Pensando na usabilidade dos controles, ainda poderíamos definir a organização destes da seguinte forma:

  • HTML server controls: Controles que são diretamente mapeados para elementos HTML, permitindo a programação destes no servidor ou codebehind.

  • Web server Controls: Controles com mais funcionalidades que os HTML server controls. Exemplos são o controle de calendário, gridview, treeview e outros. Os controles Web server controls não necessariamente representam controles HTML.

  • Validation Controls: Controles de validação, incorporam lógicas para habilitar que seja validado dados digitados pelo usuários em diversos outros controles como exemplo o TextBox. Pode ser verificar valores de controles

  • User Controls: Controles de usuários, são controles que são criados como páginas e podem ser reutilizados em páginas ou até em outros user controls.

ASP.NET Markup – Marcação do ASP.NET

Os controles de servidor ASP. NET, são utilizados nas páginas ASPX e controles de usuários ASCX. Estes controles podem ser utilizados mesclados com HTML, ou os substituindo completamente, mas possuem uma linguagem e elementos próprios para os representarem.

Seja utilizando um ambiente de desenvolvimento integrado como o Visual Web developer 2008 Express Edition(http://aplicacoesweb.blogspot.com/2008/03/visual-web-developer-2008-express.html) para adicionar controles de forma visual, ou escrevendo código, o resultado do processamento do ASPX ou ASCX sempre geram para o navegador é HTML. A imagem 4, mostra sendo montado uma página ASPX de forma visual. O código 1, mostra o código gerado:



Imagem 4 - Montando uma página usando o VWD 2008

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default"
%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0

Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Página ASPX simples"></asp:Label>
<br /> <asp:Calendar ID="Calendar1" runat="server" BackColor="White"

BorderColor="White" BorderWidth="1px" Font-Names="Verdana" Font-Size="9pt"
ForeColor="Black" Height="190px" NextPrevFormat="FullMonth" Width="350px">
<SelectedDayStyle BackColor="#333399" ForeColor="White" /> <TodayDayStyle
BackColor="#CCCCCC" /> <OtherMonthDayStyle ForeColor="#999999" /> <NextPrevStyle
Font-Bold="True" Font-Size="8pt" ForeColor="#333333" VerticalAlign="Bottom" />
<DayHeaderStyle Font-Bold="True" Font-Size="8pt" /> <TitleStyle
BackColor="White" BorderColor="Black" BorderWidth="4px" Font-Bold="True"
Font-Size="12pt" ForeColor="#333399" /> </asp:Calendar>
<br />
</div>
</form>
</body>
</html>

Código 1: Exemplo de ASPX

Ao publicar esta página num servidor que processa ASP.NET e um navegador requisita-la, o resultado será o da imagem 5 e ao exibir o fonte no navegador, o resultado será conforme código 2:


Imagem 5 - Resultado do ASPX no navegador

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html

xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Untitled Page
</title>
</head>
<body>
<form name="form1" method="post" action="Default.aspx"

id="form1"> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET"
value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT"

value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"

value="/wEPDwUKLTQxMzQzODU1NmRkqJRY4FgoQjKSxkHsKCdY/MvM0so=" />
</div>
<script

type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if
(!theForm) { theForm = document.form1; }
function __doPostBack(eventTarget,
eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {

theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value =
eventArgument; theForm.submit(); }
}

//]]>
</script>
<div>
<span
id="Label1">Página ASPX simples</span> <br /> <table id="Calendar1" cellspacing="0" cellpadding="2" title="Calendar" border="0"
style="width:350px;height:190px;font-size:9pt;font-family:Verdana;color:Black;border-width:1px;border-style:solid;border-color:White;background-color:White;border-collapse:collapse;">

código 2 : Pedaço do HTML gerado.

Repare que apesar do código de marcação do ASPX, o código gerado para navegador continua sendo HTML.

sábado, 12 de abril de 2008

HTML 5 - Como está indo...

Saiu ontem, 11 de abril, o mais novo rascunho do HTML 5 na W3C. Este visa a substituir o HTML4, XHTML 1.x, e DOM2 HTML, apesar de manter compatibilidade com estes. Isto é um rascunho que o lendo dá para ter uma idéia de onde querem chegar com o HTML 5 e qual o esforço está sendo feito.

Nesta matéria, é citado que os navegadores Opera e Firefox 2.0 já suportam algumas tecnologias do HTML5, comentando do firefox 2.0 falou-se do elemento canvas e do client-side storage.

Fui atrás para ver pelo menos o canvas, para desenhar gráficos, e consegui este exemplo:
<html>
<head>
<script type="application/x-javascript">
function draw() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

ctx.fillStyle = "rgb(200,0,0)";
ctx.fillRect (10, 10, 55, 50);

ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
ctx.fillRect (30, 30, 55, 50);
}
</script>
</head>
<body onload="draw()">
<canvas id="canvas" width="300" height="300"></canvas>
</body>
</html>

Código1:
Imagem 1 - Exemplo do canvas funcionando no firefox.

É um exemplo simples, basicamente definimos o tamanho, posição e cores, inclusive transparência de duas figuras. Neste link tem mais exemplos e fala da compatibilidade com a apple.

Veja um exemplo para Internet Explorer e Firefox neste link.

O client side storage, que tem armazenar informações no cliente como armazenar o session no servidor? Também é possível veja.

Os navegadores Firefox 3 e Internet Explorer 8, ambos em versão beta, devem implementar o HTML 5.

Devemos ter em mente também que os navegadores antigos não terão suporte às novas funcionalidades, então temos que pensar qual o público alvo de nossas aplicações web e disponibilizar os funcionalidades compatíveis. O ASP.NET já identifica o navegador e gera o HTML utilizando os recursos disponíveis do navegador, um exemplo é ativar javascript nos valitadores somente quando há suporte do navegador. Isto já é bacana, mas talvez em algum momento seja necessário fazermos nossas intervenções via javascript ou ajax para fornecer alguma funcionalidade no cliente. Um exemplo é que se quisermos utilizar um customvalidator, devemos escrever nosso código C# ou javascript, a idéia deverá ser a mesma, só mudará algumas tecnologias.

Referências:
http://www.w3.org/html/wg/html5/
http://www.whatwg.org/specs/web-apps/current-work/
http://open-mania.com/2008/01/23/w3c-publica-rascunho-de-html-5/
http://www.internetnews.com/xSP/article.php/3672011

Firefox 3:
http://developer.mozilla.org/en/docs/Firefox_3_for_developers

Internet Explorer 8:
http://info.abril.com.br/aberto/infonews/032008/05032008-21.shl
http://msdn2.microsoft.com/en-us/library/cc288472(VS.85).aspx

terça-feira, 8 de abril de 2008

XSLT: Uma fonte, várias saídas

Se tivermos um XML, poderemos utilizar do XSL Transformations(XSLT) para gerar várias saídas diferentes. Ou seja, podemos ter um XML e utilizar um XSLT para gerar um XML em outra estrutura, gerar um HTML/XHTML ou um arquivo texto.

Para quem trabalhou com o antigo ASP, JSP ou PHP a idéia de usarmos tags especiais lembra. No caso de XSLT, temos várias tags para fazer ifs, for, definir atributos e por aí vai.

Isto nos dá várias possibilidades, vejamos o código abaixo que transforma um XML numa saída HTML. Veja:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="oimundo.xslt"?>
<root>
<mensagem>
<
texto>Oi Mundo</texto>
<
sites>
<
siteId>00001</siteId>
<
siteId>00002</siteId>
</
sites>
</mensagem>
<
sites>
<
site>
<
id>00001</id>
<
descricao>http://aplicacoesweb.blogspot.com</descricao>
</
site>
<
site>
<
id>00002</id>
<descricao>http://silverlightpt.blogspot.com</descricao>
</
site>
</sites>
</root>

Código 1 : XML


<?xmlng="" style="font-size: 85%; color: #0000ff"> version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root">
<html>
<head>
<style>

body { font-family:verdana; }

</
style>
</
head>
<
body>
<
xsl:apply-templates select="mensagem" />
</
body>
</
html>

</xsl:template>

<xsl:template match="mensagem"> <h1> <xsl:value-of select="texto"/> </h1>

<h2>Sites</h2>
<table style="width:100%" border="1">
<
tr>
<th style="width:100%">
Url </th>
</
tr>
<xsl:for-each select="sites/siteId">
<xsl:variable name="siteId" select="text()" />
<tr>
<td>
<
a>
<
xsl:attribute name="href">
<
xsl:value-of select="/root/sites/site[id=$siteId]/descricao"/>
</
xsl:attribute>
<xsl:value-of select="/root/sites/site[id=$siteId]/descricao"/>
</
a>
</
td>
</
tr>
</xsl:for-each>

</table>

<xsl:template>

</xsl:stylesheet>


Código 2 : XSLT




Imagem 1 : Resultado visualizado no navegador

Para fazer o exemplo, salve o código 1 no arquivo oimundo.xml e o código 2 no
arquivo oimundo.xslt, ambos no mesmo diretórios. Após isto abra o arquivo
oimundo.xml no navegador.


Referências:

http://www.w3.org/TR/xslt
http://www.w3schools.com/XSL/el_attribute.asp

domingo, 6 de abril de 2008

Imprimir cores e imagens do plano de fundo- Opção do navegador


A maioria das vezes que fazemos uma impressão de uma página HTML podemos ser indiferentes em relação a cores e imagens de fundo, mas existem casos onde é necessário esta impressão, seja para uma melhor aparência ou por qualquer outro motivo. Então se tentarmos imprimir a página abaixo:


Veremos que a impressão perde a cor de fundo:


A opção de imprimir imagens e cor de fundo é uma opção configurada no navegador, esta configuração vem por padrão desmarcada tanto para Internet Explorer quando para Firefox. Para considerar as cores e imagem de fundo para impressão siga os passos abaixo:

Configurando para Internet Explorer:
Navegue no menu Ferramentas / Opções da Internet. Vá na guia Avançacadas e no grupo Impressão, marque a opção "Imprimir cores e imagens do plano de fundo"
Ou em inglês menu Tools / Internet Options. Vá na guia Advanced e no grupo Printing, marque a opção Print background colors and images:



Configurando o Firefox:
Navegue no menu Arquivo / Configurar Página, no agrupamento Opções marque a opção "Imprimir cores e imagens do plano de fundo".
Referências:

quinta-feira, 3 de abril de 2008

Incrementando o Navegador para Desenvolvedor e Designers

Para quem depura aplicações web já deve estar acostumado a suar, quando temos um problema no comportamento de uma página, css ou javascript no navegador. E isto acontece de forma rotineira, fazemos uma página que pode não ter o comportamento esperado, seja porque realmente esquecemos de alguma coisa, ou porque caímos em comportamentos específicos do Internet Explorer ou do Firefox.

Sempre estiveram disponíveis no mercado ferramentas para depuração(Venkman, Microsoft Script Debugger), mas existem ferramentas que disponibilizam diversas outras informações de um forma realmente fácil! Saudemos a concorrência entre Internet Explorer e Firefox.

Minha intenção não será escolher a melhor ferramenta ou navegador, pois acaba que se formos desenvolver aplicações para ambos navegadores, teremos que nos adaptar aos dois, mas mostrar o que tem de comum e diferente entre as ferramentas disponíveis para cada navegador.

Primeiro de tudo é que o IE 7 vem de galera e o Firefox 2 vai de Firebug. Ou seja, o Internet Explorer tem várias ferramentas para prover diferentes funcionalidades que precisamos e o Firefox tem boa parte no Firebug. Parece que no Internet Explorer 8, as coisas estão mais integradas e unificadas, sugerindo que este talvez este seja o melhor caminho.

Análise de HTML, DOM e CSS: Firebug(Free) x IE Developer Toolbar (Free)



Ambos possuem:
  • Explorar e modificar o DOM(Document Object Model) de uma página web. (1) (2)
  • Localizar e selecionar elementos específicos da página web. (1) (2)
  • Ver informações do HTML, inclusive de forma direcionada ao elemento selecionado. (1) (2)
  • Mostrar elementos como tables, images ou qualquer outro definido. (2)
  • Mostrar o elemento visual do HTML selecionado (1)
  • Mostrar dimensões de imagens, tamanho, caminho e texto alternativo (1*) (2)
  • Atalho para validar o HTML, CSS, WAI, e RSS (2)
  • Redimensionair a janela para uma nova resoluções(800x600, 1024 x 768) (2)
  • Possibilidade de limpar cache do navegador, cookis salvos (2)
  • Mostrar uma regua, para medir distância entre pontos ou elementos. (2)
  • Color picker: para retornar o RGB de uma cor clicada. (2)
  • Mostrar a hierarquia do elemento (1)
  • Poder editar o elemento em texto, como html(1)
  • Mostrar o HTML e css atual, ou seja, com as informações alteradas dos scripts(1) (2)
Legenda:
1 - Firebug : https://addons.mozilla.org/pt-BR/firefox/addon/1843
2 - IE Developer Toolbar (Internet Explorer 7) : http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en

Para o Internet Explorer 8 beta 1, use o IE8 Developer Tools, mais informações: http://msdn2.microsoft.com/en-us/library/cc304131(VS.85).aspx



Imagem 1 - Firebug(Analisando HTML, Dom, CSS)


Imagem 2 - IE Developer Toolbar

Análise de tráfego : Firebug(Free) x IE Watch(Free 30 dias)


Possbilidade de analisar se algum recurso foi baixado do site, reaproveitado do site e tamanho do download.

Depurador javascript: Firebug(Free) x Visual Studio ou Visual Web Developer(Free)


Possível definir breakpoint e navegar nos scripts, adicionar variáveis de watch e por aí vai

Estas ferramentas realmente podem mostrar informações que antes só com muita dedicação e horas de trabalho para descobrir.

Referências:
http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en
https://addons.mozilla.org/pt-BR/firefox/addon/1843
http://www.getfirebug.com/
http://www.getfirebug.com/docs.html
http://blogs.msdn.com/ie/archive/2007/06/22/from-microsoft-teched-2007-web-development-tools-for-internet-explorer.aspx
http://blogs.msdn.com/ie/archive/2004/10/26/247912.aspx

quarta-feira, 2 de abril de 2008

Firefox 3 Beta 5

Disponível para download o Firefox 3 beta 5:
http://www.mozilla.com/en-US/firefox/all-beta.html

Está disponível para Windows, Mac OS e Linux em 45 linguagens, inclusive Português Brasil. Esta versão beta é voltada para quem deseja testar e/ou para quem deseja ter uma idéia de como vai ficar o Firefox 3.

Quem quiser saber mais sobre o projeto Firefox 3:
http://wiki.mozilla.org/Firefox3

Uma funcionalidade incorporada ao produto é ter aparência de acordo com o sistema operacional, ou seja, no meu caso que uso Windows XP, veja o print de como ficou:

No Windows Vista:




Referência:
http://developer.mozilla.org/en/docs/Firefox_3_for_developers#User_experience
http://blogs.zdnet.com/open-source/?p=2010

terça-feira, 1 de abril de 2008

Trace - Rastreando a requisição

Através do ASP.NET Trace podemos obter várias informações de uma requisição. Esta funcionalidade permite ainda que adicionemos informações de depuração nas nossas aplicações e não será necessário retirá-las quando colocarmos nossa aplicação em produção.

Para utilizarmos desse funcionalidade, temos que habilitar o trace, fazendo isso o ASP.NET já adiciona várias informações para diagnóstico do trace, o ASP.NET também adiciona as mensagens customizadas que tenhamos colocado.

Todas as mensagens podem ser analisadas na própria página requisitada, ou através de uma página separada, onde é possível analisar um histórico de requisições.

Habilitando Trace por página

Podemos habilitar o trace de uma página adicionando o atributo e valor Trace=”true” na diretiva da página @Page, conforme código 1.

<%@Page Language="C#" AutoEventWireup="true" CodeFile="TraceDaPagina.aspx.cs" Inherits="TraceDaPagina" Trace="true" %>

Código 1 – Habilitando o trace da página

Ao executar nossa aplicação e requisitar esta página nos será exibido o retorno de nossa página e adicionado ao final várias informações sobre a requisição, conforme Imagem 1:



Imagem 1 - Trace da página

O ASP.NET já adiciona várias informações para que possamos analisar a requisição. Há informações de detalhes da requisição, como data, hora, id da sessão, tipo de requisição e outros. Na seção Trace Information podemos ver os vários métodos da página e o tempo gasto em cada um deles, desta forma poderíamos analisar se algum método está gastando muito tempo e ver se este está fazendo algum processamento desnecessário.

É possível ver também a hierarquia de controles da página e o tamanho em Bytes que cada controle gera. Temos informações de sessão, aplicação, cookie, cabeçalho da requisição e da resposta e várias outras.

Dica de segurança: Quando o trace está ativo, várias informações estão disponíveis para os usuários da aplicação. Tenha a certeza que o trace esteja desabilitado quando a aplicação estiver em produção.

Escrevendo informações customizadas

O ASP.NET disponibiliza o objeto Trace, que é do tipo TraceContext, disponível em vários contextos. Na página podemos utilizar Page.Trace, no global.asax podemos utilizar o HttpContext.Current.Trace.

O TraceContext disponibiliza dois métodos, Write e Warn, que adicionam mensagens ao log do trace, o último adiciona mensagens em vermelho no trace. Estes métodos são sobrecarregados e possuem várias formas de utiliza-los com os diferentes parâmetros. É possível ainda utilizar a propriedade IsEnabled para saber se o trace está habilitado ou não.

No código 1, abaixo, são utilizados os métodos e a propriedade citadas. É chamado também o método Thread.sleep que recebe um número de milisegundos que é o tempo que a thread responsável pela execução da requisição será colocada para dormir.

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

{

protected void Page_Load(object sender, EventArgs e)

{

if (Trace.IsEnabled)

{

Trace.Warn("Testando performance", "Começo do teste");

Trace.Write("Testando performance", "Antes de dormir");

Thread.Sleep(2000);

Trace.Write("Testando performance", "Após o for");

}

}

Código 1 – Utilizando o objeto Trace

Veja como isto aparece nas informações do Trace na imagem 2.





Imagem 2 - Adicionando informações ao Trace

Definindo Trace para toda aplicação

Já vimos que é possível configurar o trace individualmente nas páginas. Outra possibilidade é configurarmos o trace para toda aplicação. Para isto basta configurarmos o elemento trace do web.config, quando configurado, o ASP.NET armazena informações de traces até o número máximo de requisições que definirmos. O padrão são 10 requisições, que pode ser alterado e armazendo as mais recentes ou as mais antigas.

Podemos habilitar o trace para toda aplicação e posteriormente desativar o trace por página, também utilizando o atributo Trace da diretiva @Page. Veja o código 2 um exemplo:



<configuration>

<system.web>

<trace localonly="true" requestlimit="40" enabled="true"></trace>

</system.web>

</configuration>

Código 2 – Configurando trace no web.config

Habilitando o trace desta maneira você poderá visualizar as informações de trace por requisição através do recurso trace.axd. conforme Imagem 3.


Imagem 3 - Trace.axd

Os atributos configuráveis no elemento trace do web.config são:

Attribute

Description

enabled

Padrão false, true para habilitar o trace por aplicação.

pageOutput

Padrão false, true para mostrar informações de trace na página requisitada e no visualizador de trace(trace.axd).

requestLimit

Padrão 10. Número de requisições com informações de trace para serem armazenadas no servidor.

traceMode

Padrão SortByTime. Se ordena as informações de trace por data e hora(SortByTime) ou por categoria(SortByCategory).

localOnly

Padrão true. Se o visualizador de trace está disponível somente na máquina Web server.

mostRecent

Padrão false, true para mostrar as informações de trace mais recentes, desta forma ao atingir o requestLimit, as requisições mais antigas darão lugar as requisições mais recentes.

Idéia de prática

O try, catch e finally é um recurso interessante para tratamento de exceção, sabe o que o trace de uma requisição a uma página, que teria o o código 3 em seu codebehind mostraria?

protected void Page_Load(object sender, EventArgs e)

{

LoopDeDivisoes();

}

public void LoopDeDivisoes()

{

Trace.Warn("Entrou no Loop de Divisoes");

for (int i = 5; i >= 0; i--)

{

int retorno = ResultadoDaDivisao(10, i);

Trace.Write(string.Format("Retorno do método {0}", retorno));

}

}

protected int ResultadoDaDivisao(int valorA, int valorB)

{

int resultadoDivisao = -1;

Trace.Write(string.Format("{0} / {1}", valorA, valorB));

try

{

resultadoDivisao = valorA / valorB;

Trace.Write(string.Format("Resultado: {0}", resultadoDivisao));

return resultadoDivisao;

}

catch (DivideByZeroException)

{

Trace.Write("Erro de divisão por 0");

throw;

}

finally

{

Trace.Write("Finally do Resultado da divisão");

}

}

Código 3 – Prática de trace manipulando exceções

Trace

http://msdn2.microsoft.com/en-us/library/system.diagnostics.trace.aspx

http://msdn2.microsoft.com/en-us/library/kthye016.aspx

http://msdn2.microsoft.com/en-us/library/1y89ed7z.aspx

http://msdn2.microsoft.com/en-us/library/y13fw6we%28VS.71%29.aspx

http://msdn2.microsoft.com/en-us/library/z48bew18.aspx