Quantcast
Channel: MSDN Blogs
Viewing all articles
Browse latest Browse all 35736

Tracing de aplicações ASP.NET no IIS 7.x/8

$
0
0

Olá pessoal!

Poucos desenvolvedores fazem uso de um dos recursos mais interessantes disponíveis para aplicações ASP.NET, a capacidade de criar traces diretamente a partir do seu código e usá-los para resolver problemas durante a etapa de desenvolvimento.

O uso de "técnicas para criação de traces" é algo muito comum: lembra-se de ter escrito um bom e velho "Response.Write" em aplicações ASP Clássico para validar se os dados em uma determinada rotina está conforme o esperado? Pois é... era assim no ASP Clássico, em C, C++, etc

Nas aplicações ASP.NET este processo é realmente muito simples: basta habilitar o registro de entradas de trace no arquivo web.config, adicionando a seguinte tag:

<trace enabled="true" localOnly="false" pageOutput="false" />

Maiores detalhes sobre a diretiva <trace> do arquivo web.config pode ser obtida em: http://msdn.microsoft.com/en-us/library/6915t83k(v=vs.80).aspx

Com a diretiva trace configurada no seu arquivo web.config agora basta adicionar as diretivas de trace em sua aplicação. O desenvolvedor deverá adicionar algumas linhas de código na sua aplicação, para imprimir os valores que precisam ser validados. Para isso, em cada modulo que se deseja utilizer o trace, deve-se adicionar o namespace System.Web. Um exemplo simples do uso de trace em uma página ASP.NET (em C# e .NET Framework 4.5) é mostrado a seguir:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TraceSample
{
  public partial class LongRunningPage : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      //
      // This is just a page where any GET requests will take...
      // well, very long

      Trace.Warn("Warning! Entering in the PAGE_LOAD event");

      DateTime start = DateTime.Now;
      int delay = new Random().Next(5000, 15000);
      Thread.Sleep(delay);

DateTime end = DateTime.Now;
myLabel.Text = String.Format("Total page exec took:{0} ms", (end - start).TotalMilliseconds);

      Trace.Write("PAGE_LOAD event finished");

    }
  }
}

No código acima você encontra duas diretivas: Trace.Warn e Trace.Write ... existem poucas diferenças entre elas, a mais visível é que a primeira irá produzir uma entrada em vermelho na saída do trace.

Uma vez que o código da aplicação tenha sido ajustado para criar a saída necessária, você poderá acessar a página e testar a sua aplicação. Após ter executado a página, você poderá visualizar o resultado do trace através do handler TRACE.AXD. Por exemplo, se a página chama-se LongRunning.aspx., você deve primeiro chamar:

http://meusite/LongRunning.aspx

e depois:

http://meusite/trace.axd

Com isso, uma página de trace similar ao seguinte sera exibida:

 

image

Ao se clicar em uma das entradas você poderá observer detalhes do trace daquela página, algo similar ao seguinte:

image

Acima podemos ver o resultado das diretivas de trace que foram adicionadas no código da aplicação. Voilá!

Agora, o mais um ponto: É possível visualizar o resultado das diretivas Trace.Warn nos logs FREB (ou Failed Request Tracing) do IIS. Basta configurar o seu servidor para gerar este tipo de log (conforme as regras que você estabelecer) e ao visualizá-lo você encontrará as saídas geradas pelo seu aplicativo.  Esta é a outra diferença entre as duas diretivas: Trace.Write não irá aparecer nos logs do IIS, e portanto, se precisar usar este recurso de uma forma regular, use somente o Trace.Warn.

E finalmente, aquela dica de sempre: não deixe as diretivas de trace habilitadas em servidores de produção! Sempre podem existir questões relacionadas à segurança de sua aplicação e não custa descuidar!

É isso ai! Não perca tempo e aproveite para usar este recurso durante o processo de desenvolvimento da sua aplicação.

 

Abraços,

PT


Viewing all articles
Browse latest Browse all 35736

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>