BizTalk Server 2010 – Advanced Error Handling [pt-BR]

Tratamento de erros nas orquestrações

A justificação para o tratamento de erros já foi dada na publicação anterior no entanto existe um conjunto de  justificação associadas a cenários de biztalk que permitem facilmente perceber a importância destes mecanismos, nomeadamente:

  • O que acontece quando uma dada porta de envio não completa a sua função?
  • Há alguma forma de tentar novamente a transacção dentro de uma orquestração do Biztalk? E quantas vezes devemos tentar? E a orquestração espera quanto tempo?
  • Existe alguma forma de terminar a orquestração sem ser de forma abrupta?
  • Como notificar o administrador do biztalk da ocorrência do erro?
  • Onde guardar estas mensagens de erro?
  • Necessitamos de um relatório de erro? E onde guardar?

Estas são apenas algumas questões que permitem perceber a importância do tratamento de erros dentro do Biztalk Server. Mas chega a questão mais importante, como se implementa este tratamento de erros dentro de uma orquestração.

O biztalk serve através do seu componente Scope localizado na toolbox de uma orquestração, permite efectuar este tratamento de erros, interrompendo com esta funcionalidade um normal fluxo de dados dentro da orquestração.

É importante perceber que este Scope é o mecanismo que permite implementar a excepção, mas não a implementa de forma automatica. Temos de depois de inserir corpo de elementos a testar dentro do Scope, criar o gestaor de excepções ou gestores, que pretendemos.

Existem dois tipos de excepções possiveis:

  • General exception

Este tipo de excepção é similar ao try…catch em C# no entanto não permite retornar a mensagem de excepção, logo podemos terminar a orquestração de forma agradável mas não conseguimos saber o que aconteceu.

  • Exception (Tipica excepção .Net)

Neste caso, temos uma excepção normal, algo do genero das excepções do .Net, em que neste caso além de terminar a orquestração conseguimos retornar o tipo de erro que ocorreu. Nesta excepção podemos adicionar um campo exclusivo que é o nome da excepção.

Existe ainda um outro conceito muitas vezes confundido com uma excepção, uma Delivery Notification. Esta opção pode ser encontrada nas propriedades de uma porta, dentro de uma orquestração.

A diferença entre uma excepção e uma Delivery Notification é que esta última simplesmente indica que a porta de envio vai enviar uma notificação de sucesso de trasmissão da mensagem para a orquestração.  Activar esta função numa porta indica que a orquestração envia  também uma mensagem de erro em caso de falha de envio da mensagem. De salientar que este mecanismo só funciona caso a propriedade ‘Retry count’ na porta de envio estiver a valor 0.

Quando activamos a Delivery Notification a orquestração vai esperar por um ACK/NACK quando a mensagem é enviada. Se recebe um ACK, a orquestração completa o Scope e continua o seu funcionamento.

Se recebe um NACK então a orquestração instancia a excepção Microsoft.XLANGs.BaseTypes.DeliveryFailureException, o que significa que devemos sempre “apanhar” esta excepção.

Thanks,

Rui Machado

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s