BizTalk ESB Toolkit 2.0": Serviço de Tratamento de Exceções
Tudo bem ?
Vamos continuar falar sobre o BizTalk ESB Toolkit 2.0.
O pacote “BizTalk ESB Toolkit 2.0” oferece várias capacidades de tratamento de exceções. O que vamos tratar é o serviço central de publicação de exceções com processamento unificado. O serviço de exceções usa todas as capacidades de tratamento de exceções do próprio Servidor BizTalk, tal como roteamento e re-submissão. O serviço de exceções fornece uma interface web service para que as aplicações possam estender o tratamento de erros de forma centralizada.
Vamos analisar um exemplo de serviço básico. O consumidor manda uma requisição para o “Enterprise Service Bus”. O “Enterprise Service Bus” analisa a requisição e manda a mensagem para o provedor do serviço. Continuando o fluxo, o desenvolvedor pode gerar exceções padronizadas para o pacote “BizTalk ESB Toolkit 2.0”, que são arquivadas no banco de exceções.
Fluxo do processo
Figura 2 - Serviço Tratamento de Exceções
-
- Processo encaminha a mensagem com o erro para o “Enterprise Service Bus”
- O “Enterprise Service Bus” inicia o processo de tratamento de exceções
- O “Enterprise Service Bus” inicia o processamento de exceções baseado no tipo de erros
- O “Enterprise Service Bus” retorna a mensagem de status para o consumidor do serviço
Exemplo de codigo:
1: catch (Exception codeEx)
2: {
3: Console.WriteLine("Chamada exceptio");
4: ExceptionHandlingClient client =
5: new ExceptionHandlingClient("WSHttpBinding_ITwoWayAsyncVoid");
6: try
7: {
8: FaultMessage fault = newFaultMessage();
9: fault.Header = new FaultMessageHeader();
10: fault.Header.Application = "SOA";
11: fault.Header.Description = "Errro de Servico";
12: fault.Header.ErrorType = "Error Tipo Urgente";
13: fault.Header.FaultSeverity = 1;
14: fault.Header.FaultCode = "00001";
15: fault.Header.FailureCategory = "Systema";
16: fault.Header.FaultDescription = "Arquivo nao existe";
17: fault.Header.FaultGenerator = "Cliente";
18: fault.Header.Scope = "CallEsbGuidanceExceptionService";
19: fault.Header.ServiceInstanceID = System.Guid.NewGuid().ToString();
20: fault.Header.ServiceName = "Exception Service";
21: fault.Header.MachineName = System.Environment.MachineName;
22: fault.Header.DateTime = DateTime.Now.ToString();
23: fault.Header.ControlBit = "1";
24: fault.Header.MessageID = System.Guid.NewGuid().ToString();
25: fault.Header.ActivityIdentity = System.Environment.UserName;
26: fault.Header.NACK = false;
27: fault.ExceptionObject = new FaultMessageExceptionObject();
28: fault.ExceptionObject.Message = codeEx.Message;
29: fault.ExceptionObject.Source = codeEx.Source;
30: fault.ExceptionObject.Type = codeEx.GetType().ToString();
31: fault.ExceptionObject.TargetSite =
32: codeEx.TargetSite.ToString();
33: fault.ExceptionObject.StackTrace = codeEx.StackTrace;
34: FaultMessageMessageContextProperty[] context =
35: newFaultMessageMessageContextProperty[1];
36: context[0] = new FaultMessageMessageContextProperty();
37: context[0].Name = "Stage1";
38: context[0].Type = "Batch";
39: context[0].Value = "Completed";
40: FaultMessageMessageMessageData msgData =
41: new FaultMessageMessageMessageData();
42: XmlNode[] docField = new XmlNode[1];
43: docField[0] = (XmlNode)scannerDoc;
44: msgData.Any = docField;
45: FaultMessageMessage[] messages =new FaultMessageMessage[1];
46: messages[0] = new FaultMessageMessage();
47: messages[0].ContentType = "text/xml";
48: messages[0].InterchangeID = "InterchangeID1";
49: messages[0].MessageID = "MessageID1";
50: messages[0].MessageName = "MessageName1";
51: messages[0].MessageType = "MessageType1";
52: messages[0].MessageContext = context;
53: messages[0].MessageData = msgData;
54: messages[0].RoutingURL = "";
55: fault.Messages = messages;
56: client.SubmitFault(fault);
Seria muito fácil escrever vários blogs exclusivamente sobre as capacidades e os benefícios do Serviço de tratamento de exceções. Embora o serviço de tratamento de exceções forneça funcionalidades valiosas, algumas das melhores qualidades desta biblioteca estão no processamento interno de exceções do próprio BizTalk. Apesar de não abrangermos estas funcionalidades, eu encorajo fortemente acompanhar e estudar este serviço de forma mais profunda.
Abraço Markus