Tratando Exceptions da Send Port na Orchestration

Quando a Send Port é do tipo Request-Response manipular o exception é intuitivo, já que basta colocar um escopo e adicionar um exception do tipo System.Exception. Mas quando a porta é one-way a coisa complica um pouco.

Como já tive vários problemas com esse tipo de porta, sem saber se a mensagem chegou ou não ao seu destino, decidi postar esse artigo.

Configurando a Porta na Orchestration

Crie um novo projeto e adicione uma orchestration com shapes de receive e send message. Crie uma nova mensagem do tipo XMLDocument. Crie uma Receive e uma Send Port One-Way. Na propriedades da Send Port configure a opção "Delivery Notification" para "Transmitted", como mostra a figura abaixo:

image

Essa opção "Delivery Notification", quando está com a opção "Transmitted" flegada, indica que a orchestration deve ser notificada no caso da mensagem não ser recebida pelo destino. Quando a mensagem não puder ser entregue, será acionado o Exception DeliveryFailureException, que precisará ser tratado na Orchestration.

OBS: "Delivery Notification" somente funciona se a opção "Retry Count" na Send Port estiver configurada como 0. Essa opção não esta disponível quando o Binding da Porta for "Specify Now" e "Direct".

A seguir um exemplo de como configurar o "Retry Count" na Send Port do Console:

image

Adicionando o Exception

Adicione um "Scope" e arraste o send shape para o seu interior. Adicione um "Exception Handler" do tipo DeliveryFailureException. Veja exemplo abaixo.

image

No Exception, adicione um shape de Expression e coloque:

image

Compile a Aplicação e coloque os respectivos Bindings.

Para a Send Port, configure uma pasta inexistente.

No Event Viewer deve aparecer o erro:

image

"The FILE send adapter cannot open file C:\Pasta\{08B23A7F-67E8-465A-B058-05ED3683AE5A}.xml for writing.

Details: The system cannot find the path specified."

Fácil!

O código do exemplo pode ser baixado em: http://samplehandlingexcept.codeplex.com/

Até a próxima..

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog