Utilizar el enrutamiento de mensajes con erroresUsing Failed Message Routing

La funcionalidad de control de errores permite al diseñador designar un control automatizado de los mensajes con errores como alternativa al comportamiento tradicional (ahora como configuración predeterminada) de colocar los mensajes con errores en la cola de suspensión.The error-handling facility allows the designer to designate automated handling of messaging failures as an alternative to the traditional (now default) behavior of placing failed messages in the Suspended queue. Este control automatizado enruta un mensaje con error a cualquier destino de enrutamiento de suscripción, como un puerto de envío o una orquestación.This automated handling routes an error message to any subscribing routing destination, such as a send port or orchestration. El mensaje de error es un clon del mensaje original, que incluye todas las propiedades anteriormente promocionadas ahora degradadas y con las propiedades seleccionadas relativas al error de mensajería específico promocionadas en el contexto del mensaje.The error message is a clone of the original message with all previously promoted properties now demoted and with selected properties related to the specific messaging failure promoted to the message context.

Advertencia

Los mensajes con errores contienen una copia del mensaje original.Failed messages contain a copy of the original message. Si el mensaje original contiene información confidencial, diseñe los procesos manuales y automáticos de mensajes con errores para evitar que se revelen accidentalmente.If the original message contains sensitive information, design your manual and automatic failed message processes so that they avoid accidental disclosure.

¿De qué se compone el enrutamiento de mensajes con errores?What Does Failed Message Routing Consist Of?

Cuando el enrutamiento de mensajes con errores está habilitado, BizTalk Server no suspende el mensaje, sino que lo enruta.When failed message routing is enabled, BizTalk Server does not suspend the message—it routes the message instead. El enrutamiento de mensajes con errores se puede habilitar tanto en puertos de recepción como de envío, con el siguiente resultado:Failed message routing can be enabled on both receive and send ports, with the following results:

  • Si el enrutamiento de mensajes con errores está habilitado en un puerto de recepción y un mensaje tiene errores en la canalización de recepción o en el enrutamiento, se genera un mensaje con errores.If failed message routing is enabled on a receive port and a message fails in the receive pipeline or in routing, a failed message is generated. Si se produce un error en la fase de desensamblado o antes de ella, el mensaje de error es un clon del intercambio original.In the case where an error occurs in or before the disassembly phase, the error message is a clone of the original interchange.

  • Si el enrutamiento de mensajes con errores está habilitado en un puerto de envío y el mensaje tiene errores en la canalización de envío, se genera un mensaje con errores.If failed message routing is enabled on a send port and the message fails in the send pipeline, a failed message is generated.

    Cuando se genera un mensaje con errores, BizTalk Server promociona las propiedades de contexto del mensaje relacionado con el informe de errores y degrada las propiedades de contexto del mensaje normal antes de publicar el mensaje con errores.When a failed message is generated, BizTalk Server promotes error-report-related message context properties and demotes regular message context properties before publishing the failed message. Compare este comportamiento con el comportamiento predeterminado cuando el enrutamiento de mensajes con errores no está habilitado: los mensajes que dan error se suspenden.Compare this to the default behavior when failed message routing is not enabled: Messages that fail are suspended.

¿Qué tipos de errores de mensajería desencadenan un mensaje de error?What Kinds of Messaging Failures Trigger an Error Message?

Cualquier error que se produzca en el procesamiento de los adaptadores, en el procesamiento de las canalizaciones, en las asignaciones o en el enrutamiento de mensajes tiene como resultado un mensaje de error si el enrutamiento de mensajes con errores está habilitado.Any failure that occurs in adapter processing, pipeline processing, mapping, or message routing results in an error message if routing for failed messages is enabled. Cuando se produce un error de mensajería en una orquestación, durante la recepción desde un puerto de recepción o durante el envío a un puerto de envío, el mensaje de error resultante se asocia con los puertos de mensajería con los que está enlazada la orquestación.When a messaging error occurs while an orchestration is receiving from a receive port or sending to a send port, the resulting error message is associated with the messaging ports to which the orchestration is bound.

Suscribirse a un mensaje de errorSubscribing to an Error Message

Los mensajes de error se entregan a las orquestaciones o a los puertos de envío que se han suscrito para recibirlos.Error messages are delivered to orchestrations or send ports that have subscribed to receive them. Una suscripción normalmente selecciona un mensaje de error según el nombre del puerto en el que se ha producido el error de mensajería (un puerto envío o un puerto de recepción).A subscription typically selects an error message based on the name of the port in which the messaging error occurred (either a send or a receive port). Una suscripción también podría filtrar otras propiedades promocionadas al contexto del mensaje de error (por ejemplo, InboundTransportLocation o FailureCode).A subscription might also filter on other properties promoted to the error's message context (for example, InboundTransportLocation or FailureCode).

Especificación de mensajes de errorError Message Specification

Un mensaje de error es un clon del mensaje con errores original que contiene todas las propiedades anteriormente promocionadas ahora degradadas y un juego de propiedades específicas del error promocionadas en el contexto del mensaje.An error message is a clone of the original failed message, with all previously promoted properties demoted and with a set of error-specific properties promoted to the message context. Las propiedades promocionadas anteriormente se degradan para evitar la entrega imprevista a los suscriptores no designados para recibir el mensaje de error.Previously promoted properties are demoted to avoid unintended delivery to subscribers not designated to receive the error message. El mensaje de error se publica para su distribución a los suscriptores (orquestaciones, puertos de envío y grupos de puertos de envío).The error message is published for distribution to subscribers (orchestrations, send ports, and send port groups).

Las propiedades que se promocionan al contexto de un mensaje de error todos quedan en el ErrorReport espacio de nombres en el servidor BizTalk Server.The properties that are promoted to the context of an error message all fall under the ErrorReport namespace in BizTalk Server. Son las siguientes:They are as follows:

Nombre de propiedadProperty name Tipo de datosData type PromocionadaPromoted DescripciónDescription
FailureCodeFailureCode System.StringSystem.String Yes Código de error.Error code. Un valor hexadecimal que se notifica en la consola de administración de BizTalk Server.A hexadecimal value that is reported in the BizTalk Server Administration console.
FailureCategoryFailureCategory System.Int32System.Int32 Yes No se usa esta propiedad.This property is not used. Su valor no está definido.Its value is undefined.
DescripciónDescription System.StringSystem.String NoNo Descripción del error.Error description. El mismo texto de diagnóstico como está escrito en el registro de eventos de aplicación con respecto a este error de mensajería.Same diagnostic text as is written to the Application Event Log regarding this messaging failure.
MessageTypeMessageType System.StringSystem.String Yes Mensaje de tipo mensaje con errores, o vacío si el tipo de mensaje es indeterminado.Message type of failed message, or empty if message type is indeterminate.

BizTalk Server utiliza el tipo de mensaje para asociar los mensajes con los esquemas XML correspondientes.BizTalk Server uses the message type to associate messages with their XML schemas. El tipo de mensaje se forma mediante la concatenación del espacio de nombres del esquema con el nodo raíz del esquema: http://mynamespace#rootnode.Message type is formed by concatenating the schema namespace with the schema root node: http://mynamespace#rootnode. Nota: conjunto de mensajes que generan errores antes de que se determina el tipo de mensaje no tiene esta propiedad.Note: Messages that fail before their message type is determined do not have this property set.
ReceivePortNameReceivePortName System.StringSystem.String Promocionada si el error se produjo durante el procesamiento de entrada (en un puerto de recepción).Promoted if the failure happened during inbound processing (in a receive port)

No promocionada si el error se produjo en un puerto de envío.Not promoted if the failure happened in a send port.
Nombre del puerto de recepción donde se produjo el error.Name of the receive port where the failure happened.
InboundTransportLocationInboundTransportLocation System.StringSystem.String Promocionada si el error se produjo durante el procesamiento de entrada (en un puerto de recepción).Promoted if the failure happened during inbound processing (in a receive port)

No promocionada si el error se produjo en un puerto de envío.Not promoted if the failure happened in a send port.
URI de la ubicación de recepción donde se produjo el error.URI of the receive location where the failure happened.
SendPortNameSendPortName System.StringSystem.String Promocionada si el error se produjo durante el procesamiento de salida (en un puerto de envío).Promoted if the failure happened during outbound processing (in a send port)

No promocionada si el error se produjo en un puerto de recepción.Not promoted if the failure happened in a receive port.
Nombre del puerto de envío donde se produjo el error.Name of the send port where the failure happened.
OutboundTransportLocationOutboundTransportLocation System.StringSystem.String Promocionada si el error se produjo durante el procesamiento de salida (en un puerto de envío).Promoted if the failure happened during outbound processing (in a send port)

No promocionada si el error se produjo en un puerto de recepción.Not promoted if the failure happened in a receive port.
URI de la ubicación de envío donde se produjo el error.URI of the send location where the failure happened.
ErrorTypeErrorType System.StringSystem.String Yes Indica el tipo de mensaje que contiene el error.Indicates the type of message that the error contains. Esta propiedad siempre contiene el valor FailedMessage, que significa que el error contiene el mensaje con errores original.This property always contains the value FailedMessage, meaning that the error contains the original failed message.
RoutingFailureReportIDRoutingFailureReportID System.StringSystem.String Yes Esta propiedad proporciona el identificador del informe de errores de enrutamiento que genera BizTalk Server cuando hay un error de enrutamiento.This property provides the ID of the routing failure report that BizTalk Server generates when there is a routing failure. Un informe de error de enrutamiento es un mensaje especial que BizTalk Server genera y suspende.A routing failure report is a special message that BizTalk Server generates and suspends. Este mensaje no tiene cuerpo pero incluye el contexto del mensaje con errores.This message does not have a body, but it has the context of the failed message. Con este identificador, una orquestación de control de errores o un puerto de envío pueden consultar la base de datos de cuadro de mensajes y procesar el informe de error de enrutamiento.Using this ID, an error-handling orchestration or a send port can query the MessageBox database and process the routing failure report. Por ejemplo, puede que una orquestación decida finalizar el informe de error de enrutamiento después de recibir el mensaje con errores.For example, an orchestration may want to terminate the routing failure report after it gets the failed message.

Controlar mensajes de errorHandling Error Messages

El control de errores se especifica mediante una orquestación o una suscripción de puerto de envío cuyo filtro coincide con las propiedades que se han promocionado al contexto del mensaje de error.Error handling is specified by an orchestration or send-port subscription whose filter matches the properties that have been promoted to the message context of the error message.

Implicaciones de seguridadSecurity Implications

La identidad asociada al mensaje original, ya se determine su identidad inicial o su identidad final mediante la fase Resolver entidad de la canalización de recepción, se asigna al mensaje de error.The identity associated with the original message—either its initial identity or its final identity determined by the Resolve Party stage of the receive pipeline—is assigned to the error message.

Los mecanismos de seguridad que restringen la entrega de mensajes a los puertos y orquestaciones de suscripción autorizados también se aplican a los mensajes de error.The security mechanisms that restrict delivery of messages to authorized subscribing ports and orchestrations also apply to error messages.

Un puerto de envío que se suscribe a un mensaje de error pero que no está configurado con un certificado de cifrado apropiado, no recibirá los mensajes de error originados por los errores de mensajería en la fase o antes de la fase de descifrado de la canalización de recepción por la que el mensaje original tuvo acceso a BizTalk Server.A send port that subscribes to an error message, but is not configured with an appropriate decryption certificate, does not receive error messages that result from messaging failures at or before the decrypt stage of the receive pipeline through which the original message entered BizTalk Server. En su lugar, los mensajes con errores se colocan en la cola de suspensión.Instead, the failed messages are placed in the Suspended queue.

Error de mensajería del adaptadorAdapter Messaging Failure

Si un adaptador suspende un mensaje, se publica un mensaje de error.If an adapter suspends a message, an error message is published. No se genera ningún mensaje de error si no se suspende el mensaje.No error message is generated if the message is not suspended.

Canalizaciones de recepción transaccionalesTransactional Receive Pipelines

Si una canalización de recepción transaccional produce una excepción (especifica que se debe anular la transacción), la transacción se anula y se publica un mensaje de error.If a transactional receive pipeline throws an exception (specifies that the transaction should be aborted), then the transaction is aborted and an error message is published.

Si una canalización de recepción transaccional suspende explícitamente un mensaje (especifica que MessageDestination = SuspendQueue), la transacción actual puede continuar (y se puede confirmar a no ser que las fases posteriores especifiquen que se anule) y se publica el mensaje de error resultante.If a transactional receive pipeline explicitly suspends a message (specifies that MessageDestination = SuspendQueue), then the current transaction is allowed to proceed (and may be committed unless subsequent stages specify to abort it) and the resulting error message is published.

Puertos de envío de petición-respuestaSolicit-Response Send Ports

Cuando se envía un mensaje de solicitud desde una orquestación y hay errores en la transmisión o su respuesta genera errores de procesamiento entrante, la orquestación recibe una excepción independientemente de que el mensaje con errores se haya enrutado.When a request message is sent from an orchestration and it fails transmission or its response fails inbound processing, the orchestration gets an exception, regardless of whether the failed message has been routed.

En el caso de que un puerto de envío de petición-respuesta esté conectado a un puerto de recepción de solicitud-respuesta, el puerto de recepción recibe un mensaje de respuesta (si la transmisión se realiza correctamente) o un mensaje de confirmación negativa (NACK), independientemente de que se haya enrutado el mensaje con errores.In the case where a solicit-response send port is connected to a request-response receive port, the receive port gets either a response message (if the transmission succeeds) or a NACK (if the transmission fails), regardless of whether the failed message has been routed.

Puertos de envío unidireccionalesOne-Way Send Ports

Cuando se envía un mensaje desde una orquestación a través de un puerto de envío configurado para la notificación de entrega, la orquestación recibe una notificación de entrega independientemente de que se haya enrutado el mensaje de error.When a message is sent from an orchestration through a send port configured for delivery notification, then the orchestration receives a delivery notification regardless of whether the error message has been routed. Es decir, el puerto de envío genera una notificación de entrega para la orquestación aunque el puerto encuentre un error de mensajería durante el procesamiento.In other words, the send port generates a delivery notification for the orchestration even if the port encounters a messaging failure during processing. La notificación confirma la entrega al puerto, pero no informa del procesamiento correcto a través del puerto.The notification confirms delivery to the port, but does not address successful processing through the port.

Reanudar mensajes suspendidosResuming Suspended Messages

La mayoría de mensajes que generan errores durante el procesamiento de entrada (es decir, el procesamiento desde, en y hasta el adaptador de recepción pero sin incluir la publicación en el cuadro de mensajes) y cuyos errores no se controlan, se suspenden como reanudables.Most messages that fail inbound processing (that is, processing from and including the receive adapter and up to but not including publication to the message box), and whose failures are not handled, are suspended as resumable. La excepción es que los mensajes de solicitud desde los puertos de recepción bidireccionales se suspenden como no reanudables.The exception is that request messages from two-way receive ports are suspended as nonresumable.

Normalmente, se suspenden los mensajes en su forma original (como eran antes del procesamiento de canalización), pero hay dos excepciones:Messages are typically suspended in their original form (as they were before pipeline processing), with two exceptions:

  • Mensajes suspendidos por componentes de canalización.Messages suspended by pipeline components. BizTalk Server suspende este tipo de mensajes en el mismo formato que se proporcionaron al componente de canalización con errores.BizTalk Server suspends this type of message in the same form as it was provided to the failing pipeline component. Cuando se reanuda el mensaje, se realiza el procesamiento de canalización desde el principio de la misma canalización.When the message is resumed, it undergoes pipeline processing from the beginning of the same pipeline. Esto implica que un componente de canalización en una fase de canalización anterior a la fase donde se produjo el error original debe estar preparado para controlar el "mismo" mensaje en un formato diferente del original en el que se procesó dicho mensaje.This implies that a pipeline component in a pipeline stage that precedes the stage where the original failure occurred must be prepared to handle the "same" message in a form that is different from the original form in which it processed that message.

  • Desensamblado posteriormente errores de enrutamiento de intercambio de mensajes de recuperables.Messages from recoverable interchange disassembly that subsequently fail routing. BizTalk Server suspende este tipo de mensajes en el mismo formato en el que se publicaron.BizTalk Server suspends this type of message in the same form as it was published. Es el formato que tenía el mensaje después de la ejecución de la canalización.This is the form the message had after pipeline execution. Cuando se reanuda el mensaje, se omite el procesamiento de canalización y se publica directamente en la base de datos de cuadro de mensajes.When the message is resumed, it skips pipeline processing and is published directly to the MessageBox database.

Escenarios que dan lugar a mensajes suspendidos (no reanudables)Scenarios Leading to Suspended (Non-Resumable) Messages

Si bien lo más habitual es que los mensajes se suspendan como reanudables, hay algunos escenarios que dan lugar a mensajes no reanudables:While it is more common for messages to be suspended as resumable, there are some scenarios that lead to non-resumable messages:

  • En un puerto de envío de entrega ordenada con la opción de continuar en caso de error de canalización, asignación o transmisión habilitada.In an Ordered Delivery send port with continue on failure enabled, if there is a failure in the pipeline, mapping or transmission.

  • En un puerto de recepción de entrega ordenada, si el adaptador se ha configurado para suspender mensajes como no reanudables en caso de error.In an Ordered Delivery receive port, if the adapter is configured to suspend messages on non-resumable on failure. Por ejemplo, si el valor de configuración del adaptador de MSMQ "En caso de error" se ha definido como "Suspender (no reanudable)", o si el adaptador de MQSeries tiene la opción "Suspender como no reanudable" habilitada, los mensajes con errores se suspenderán como no reanudables.For example, if the MSMQ adapter setting "On Failure" is set to "Suspend (non-resumable)" or the MQSeries adapter has "Suspend as Non Resumable" enabled, failed messages will be suspended as non-resumable.

  • En un puerto de recepción bidireccional, si se produce un error del mensaje de respuesta en la transmisión, asignación o canalización.In a two-way receive port, if the response message fails in the pipeline, mapping, or transmission.

  • En un puerto de recepción bidireccional, si se produce un error del mensaje de recepción en la transmisión, asignación o canalización.In a two-way receive port, if the receive message fails in the pipeline, mapping or transmission. El comportamiento del adaptador individual puede ser diferente.Individual adapter behavior may be different. Por ejemplo, el adaptador de HTTP no suspende mensajes de forma predeterminada, aunque puede configurarse para que lo haga.For example, the HTTP adapter does not suspend messages by default but can be configured to do so.

Vea tambiénSee Also

Control de errores Error Handling
Usar confirmaciones Using Acknowledgments
Entrega ordenada de mensajesOrdered Delivery of Messages