Ejecución del ejemplo de controlador de excepciones personalizadas de reparación y reenvío
El ejemplo de controlador de excepciones personalizados repair and resubmit muestra una técnica extremadamente eficaz para integrar la intervención humana en los procesos de aplicación basados en ESB y Microsoft BizTalk e implementa un patrón de diseño útil. El código de ejemplo se integra perfectamente en el sistema de administración de excepciones de ESB.
En el ejemplo se muestra cómo puede usar un controlador de excepciones personalizado en una orquestación. Cuando un proceso de la orquestación (EAIProcess.odx) encuentra un error, el controlador de excepciones genera y publica un mensaje de error de ESB. Este mensaje de error incluye en su carga los mensajes (incluidas sus propiedades de contexto relacionadas con BizTalk) que estaban "en curso" cuando se produjo la excepción y la instancia de System.Exception actual detectada por el motor de orquestación de BizTalk. Cuando esto ocurre, un mensaje "Denegado" y un mensaje "Aprobado" se conservan con el mensaje de error.
Una segunda orquestación denominada EAIProcessHandler.odx, que se implementa de forma desacoplada y actúa como controlador de excepciones personalizado, se suscribe al código de error específico generado en la orquestación EAIProcess.odx y consume el mensaje de error. Este controlador de excepciones extrae los mensajes originales (como documentos con tipo) y las instancias system.Exception que se conservan originalmente en el mensaje de error.
Los mensajes originales ahora están disponibles para su procesamiento con todas sus propiedades de contexto originales. El controlador de excepciones personalizado (EAIProcessHandler.odx) escribe los mensajes "Denegado" y "Aprobado" en el sistema de archivos en las siguientes ubicaciones:
Mensaje aprobado:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
Mensaje denegado para reparación y reenvío:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
Mensaje denegado:
- \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline
El controlador de excepciones serializa el mensaje "Denegado" para Reparar y volver a enviar al sistema de archivos mediante una instrucción de procesamiento de Microsoft InfoPath. Una plantilla de InfoPath permite al usuario editar el formulario y volver a enviar el resultado (vea la figura 1), que inicia la orquestación EAIProcess.odx que valida el mensaje.
Ilustración 1
Un mensaje de prueba generado por la plantilla Reparación y reenvío de InfoPath
Además, hay un puerto de envío genérico denominado ALL. Exceptions_FILE que está configurado para usar la canalización GlobalFaultProcessor. Este puerto se suscribe a todas las excepciones del sistema, tanto los mensajes de enrutamiento de mensajes con error de BizTalk como los mensajes de error de ESB. El marco de administración de excepciones normaliza todos en un solo formato y los serializa mediante una instrucción de procesamiento de InfoPath en la carpeta \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions.
Instalación
Todos los ejemplos de administración de excepciones usan el mismo conjunto de servicios principales y artefactos de aplicación de BizTalk. Por lo tanto, debe instalar los artefactos de ejemplo de administración de excepciones solo una vez para poder ejecutar todos los ejemplos de administración de excepciones. Para obtener información sobre cómo instalar los ejemplos de administración de excepciones, consulte Instalación de los ejemplos de administración de excepciones.
Ejecución de la aplicación de ejemplo
Para ejecutar el ejemplo de controlador de excepciones personalizado reparar y volver a enviar
Antes de ejecutar este ejemplo por primera vez, asegúrese de que la ubicación de recepción y las direcciones URL de puerto de envío apunten a los directorios adecuados en la carpeta \Source\Samples\Exception Handling\Test\Filedrop. La ubicación de recepción debe especificar la carpeta EAIProcess.RequestPort y las direcciones URL del puerto de envío deben especificar las carpetas EAIProcess.PostApproval y EAIProcessHandler.PostDecline.
Si la aplicación GlobalBank.ESB aún no se está ejecutando, use la Consola de administración de BizTalk para iniciarla.
Inicie el ejemplo copiando el archivo de ejemplo denominado Request_EAIProcessHandler.xml, ubicado en la carpeta \Source\Samples\Exception Handling\Test\Data, en la carpeta especificada para la ubicación de recepción del EAIProcess.RequestPort_FILE: \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort.
Abra la carpeta denominada EAIProcessHandler.PostDecline (en la carpeta \Source\Samples\Exception Handling\Test\Filedrop). Verá el mensaje "Rechazado*" generado por la orquestación de control de excepciones.
Abra la carpeta denominada EAIProcessHandler.RepairSubmit (en la carpeta \Source\Samples\Exception Handling\Test\Filedrop). Verá un mensaje "RepairSubmit" generado por la orquestación de control de excepciones.
Haga doble clic en el archivo RepairSubmit para abrirlo en la plantilla de InfoPath adecuada. Verá el mensaje listo para editar y volver a enviar.
Cambie el valor del campo Precio unitario de 0 a 2 y, a continuación, haga clic en el botón Enviar situado en la barra de herramientas del formulario de InfoPath para volver a enviar el documento editado a BizTalk para su procesamiento. El proceso de envío usa una ubicación de recepción HTTP configurada para BizTalk.
Vaya a la carpeta EAIProcess.PostApproval (en la carpeta \Source\Samples\Exception Handling\Test\Filedrop). Ahora verá el documento "Aprobación*" que contiene el valor actualizado para el precio unitario.
Cómo funciona el ejemplo
El mensaje que envía activa la orquestación EAIProcess. Cuando la orquestación EAIProcess procesa el mensaje, intenta dividir 1 por el precio unitario. Dado que el precio unitario es cero, se produce una excepción de división por cero. El código del controlador de eventos de la orquestación detecta esta excepción y crea un mensaje de error. La cantidad de pedidos del mensaje es mayor que 10, por lo que la lógica de negocios dicta que esta excepción tiene un valor de campo FaultCode de 1000.
A continuación, la orquestación EAIProcess publica el mensaje de error en el cuadro de mensaje de BizTalk a través de un puerto enlazado directo y finaliza la orquestación.
Una orquestación de controlador de errores personalizada denominada EAIProcessHandler, que se suscribe a los mensajes con un valor de campo FaultCode de 1000, recoge el nuevo mensaje de error. El código de la orquestación crea el mensaje "Denegado" y el archivo de InfoPath y, a continuación, lo coloca en las carpetas EAIProcessHandler.PostDecline y EAIProcessHandler.RepairSubmit listas para la intervención humana.