Como tratar exceptions

Há duas maneiras de tratar uma exception e dar um re-throw na mesma ,abaixo seguem dois trechos de código:

Código 1:

1: try
2: {
3:
4: }
5: catch(Exception ex)
6: {
7:         throw ex;
8: }

Código 2:

1: try
2: {
3:
4: }
5: catch(Exception ex)
6: {
7:           throw;
8: }

Quando você usa o código 1,você vair dar um Throw no mesmo objeto Exception e como resultado o stack trace original será perdido.O código 2,mantém o stack trace original e isso é muito útil para debugar.

Um dos guias sobre tratamentos de exceptions diz:


Não de um re-throw jogando o mesmo objeto de exception.Isso faz com que o stack trace original da exception seja perdido;use somente “throw”,para dar um re-throw na exception.

A melhor maneira de ver a diferença,é nesse código de exemplo:

1: class Program
2: {
3: static void Main(string[] args)
4: {
5: try
6: {
7:            Method1();
8: }
9: catch (Exception ex)
10: {
11:           throw;
12: }
13: }
14:
15: public static void Method1()
16: {
17:            Method2();
18: }
19:
20: public static void Method2()
21: {
22:            throw new Exception();
23: }
24: }

O seguintestack trace será gerado com o exemplo acima:

at ConsoleApplication2.Program.Method2()
at ConsoleApplication2.Program.Method1()
at ConsoleApplication2.Program.Main(String[] args)
at System.AppDomain.ExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Quando você dá um throw em ex;ao invés de throw você recebe:

at ConsoleApplication2.Program.Main(String[] args)
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Como você pode ver o stack trace não possui a chamada dos métodos 1 e 2,então quando você usa throw ex,você pede informações essenciais do debug.

Conhecendo paths ASP.NET

Conhecendo paths ASP.NET

O ASP.NET contém muitas propriedades para recuperar informação sobre paths da requisição atual,controle e aplicação.
Há muita informação sobre paths no objeto Request,alguns desses são pra sobrepor e outros vão a níveis mais baixos do path,por isso pode ser confuso achar apenas o caminho certo que você está procurando.

Eu achei uma boa idéia listar as opções de path junto com sua descrição e um exemplo.

Aqui está uma lista de propriedades relacionada com o objeto Request e o objeto Page.Tomamos como exemplo o caminho http://www.webabstract.com/webclass/learn/paths.aspx, onde webclass é o nome do virtual.

Propriedade do Request Descrição e valor
ApplicationPath Retorna a raiz-relativa lógica da pasta virtual da aplicação
/webclass/
PhysicalApplicationPath Retorna o caminho local (FileSystem) da pasta virtual da aplicação
c:\inetpub\wwwroot\webclass
PhysicalPath Retorna o caminho local do script
atual
ou do path atual
c:\inetpub\wwwroot\webclass\learn\paths.aspx
Path

FilePath

CurrentExecutionFilePath

Todos esses retornam o caminho lógico completo da raiz-relativa incluindo paths e nome de scripts.CurrentExecutionFilePath <br />retorna o caminho da requisição atual,depois de um Transfer enquanto FilePath sempre retorna o caminho original da requisição
/webclass/learn/paths.aspx
AppRelativeCurrentExecutionFilePath Retorna o caminho virtual da raiz-relativa do script ou caminho da requisição atual.<br />Se estiver num Transfer o caminho da transferencia é que é retornado
~/learn/paths.aspx
PathInfo Retorna qualquer extra path depois do nome do script.Se não houver extra path retorna o caminho da raiz-relativa.
/webclass/learn/paths.aspx/ExtraPathInfo
RawUrl Retorna a URL completa da raiz-relativa incluindo QueryString e Extra Path

/webclass/learn/paths.aspx?nome=DotNet
Url Retorna a URL completa incluindo QueryString e ExtraPath.Note que retorna uma instancia do objeto Uri ao invés de string.

http://www.webabstract.com/webclass/learn/paths.aspx?nome=DotNet

UrlReferrer Retorna a URL completa da página que enviou a requisição.Também retorna uma instância do objeto Uri e retorna NULL se a página foi acessada diretamente sendo digitada na barra de endereço.

http://www.webabstract.com/webclass/learn/default.aspx?Info

Como você pode ver,há muita informação disponível pra cada um dos 3 formatos de path comuns:

  • Caminho Físico (Physical Path):
    é um caminho do tipo do OS que aponta para um caminho ou arquivo no disco.
  • Caminho lógico (Logical Path):
    é um caminho Web que é relativo a raiz do servidor.
  • ~/(raiz-relativa) Path:
    é um caminho especifico do ASP.NET que inclue ~/ pra indicar a raiz virtual do caminho Web.O ASP.NET pode converter caminhos virtuais tanto em caminhos lógicos usando Control.ResolveUrl() ou caminhos fisicos usando Server.MapPath().Caminhos de raiz-relativa são uteis para especificar URL móveis que não dependem da estrutura de diretórios relativa e muito util para uso em controles ou componentes.

Você deve conseguir pegar qualquer formato de path ou script necessário do ASP.NET usando esses mecanismos

Internet Explorer 9 adiciona integração inovadora com o desktop

Eu usei o Internet Explorer 9 por alguns dias e achei bom.O  navegador tem uma interface limpa,agora mais parecido com  o que vimos nos navegadores Firefox e Chrome.

Como você provavelmente já deve ter ouvido falar ele está bastante rápido.Parece que a microsoft está finalmente preocupada em criar um bom navegador.

Eles também adicionaram algumas coisas inovadoras no browser,que permitem forte integração com o Windows 7.Leia esse artigo no MSDN pra ver como você pode utilizar essa nova funcionalidade.

Alguns sites já estão utilizando isso.Abaixo está um Jump List disponibilizado pelo site Amazon.com.

E isso é só o começo,há thumbnails toolbars,icons overlay,notificações e muito mais!

Como Desktop e Web continuam interagindo fortemente,esta ferramenta nova cai como uma mão na roda!