terça-feira, 22 de setembro de 2009

ExceptionHandling Application Block

Estive com uma equipa da PTSI, em Junho de 2007, a desenvolver serviços de negócio para um projecto interno, gerido e liderado pela Microsoft. Fomos incutidos a usar algumas soluções "state of the art". Uma das soluções usadas foi "ExceptionHandling Application Block".

O Enterprise Library Exception Handling Application Block permite criar uma estratégia coerente para o tratamento de excepções que ocorrem em todas as camadas de uma arquitectura de aplicativos.

Foi projectado para suportar código incluído nas declarações de capturas em componentes de aplicação. Em vez de repetir este código, como o registo de informações de excepção, por todos os blocos de catch idênticos em uma componente de aplicação, o bloco de aplicativo permite aos programadores encapsular esta lógica como manipuladores de excepção reutilizáveis. Manipuladores de excepção são classes .NET que encapsulam lógica de manipulação de excepção e implementam o Exception Handling Application Block interface chamado IExceptionHandler.

O Exception Handling Application Block inclui 4 manipuladores de excepção:
  • Wrap handler - Encapsula uma excepção em torno de outra.
  • Replace handler - substitui uma excepção com outra.
  • Logging handler - formata informação de excepção, tais como a mensagem. Em seguida, o Logging handler dá essa informação para o Enterprise Library Logging Application Block para que seja publicada.
  • Fault Contract Exception Handler - para uso em Windows Communication Foundation (WCF), e gera um novo contrato de falha da excepção.

Exemplo de Código de Aplicação
O código mostra como executar a política chamada "Data Access Policy" quando ocorre uma excepção.
[C #]

try

{

// Run code.

}

catch(Exception ex)

{

bool rethrow = ExceptionPolicy.HandleException(ex, " Data Access Policy");

if (rethrow)

throw;

}


Definições necessárias no Config

Definir uma Exception Policy no web.config

(...)

<exceptionHandling>

<exceptionPolicies>

<add name="Exception Policy">

(...)

Associar um tipo de Excepção para a Exception Policy

(...)

<add name="Exception Policy">

<exceptionTypes>

<add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"postHandlingAction="NotifyRethrow" name="Exception">

(...)

Associar o Exception Handler ao tipo de Excepção da Exception Policy

(...)

<exceptionHandlers>

<add exceptionMessage="Replaced Exception"exceptionMessageResourceType=""replaceExceptionType="System.ApplicationException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ReplaceHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" name="Replace Handler" />

</exceptionHandlers>

</add>

</exceptionTypes>

</add>

</exceptionPolicies>

</exceptionHandling>

(...)

</configuration>

1 comentário:

Rodolfo Cardoso disse...

Interessante, uma solução que permite centralizar o tratamento das excepções com o objectivo de manter uma lógica de tratamento coerente nas aplicações.
Parece-me um assunto que pode ser explorado.