Mensajes de Service Broker

La mayor parte de la comunicación entre aplicaciones se controla mediante mensajes específicos de aplicación que se definen como objetos de tipo de mensaje. Además, Service Broker proporciona tres tipos de mensajes que contienen información de Service Broker en lugar de datos específicos de aplicación. Cada aplicación debe contener lógica para controlar mensajes de error y de fin de diálogo. Si la aplicación establece un temporizador de conversación en una conversación de diálogo, debe contener lógica para controlar mensajes de temporizador de diálogo. Service Broker proporciona estos tipos de mensajes a cada servicio, tanto si aparecen en el contrato del servicio como si no lo hacen.

Los mensajes de temporizador de diálogo indican que el temporizador de conversación de un diálogo ha caducado. Estos mensajes son mensajes de tipo https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Los temporizadores de conversación son específicos de un extremo de la conversación; Service Broker nunca envía un mensaje de temporizador de diálogo al otro extremo de la conversación.

Los mensajes de temporizador de diálogo son mensajes vacíos. Una operación de recepción recibe el mensaje de temporizador de diálogo antes que cualquier otro mensaje para ese diálogo, independientemente del orden en que el mensaje de tiempo de espera ha llegado a la cola.

Mensajes de error

Cuando un servicio remoto finaliza un diálogo con un error o el broker local detecta un error imposible de recuperar en un diálogo, el broker local crea un mensaje de error. Estos mensajes son mensajes de tipo https://schemas.microsoft.com/SQL/ServiceBroker/Error. Los mensajes de error se validan como XML correcto.

El documento XML incluido en un mensaje de error utiliza el espacio de nombres https://schemas.microsoft.com/SQL/ServiceBroker. El elemento raíz del documento tiene el nombre local Error y contiene un elemento denominado Code y un elemento denominado Message. El elemento Code contiene un valor entero. El elemento Message contiene el texto legible del mensaje.

Por ejemplo, un mensaje de error generado por un servicio que procesa informes de gastos puede contener el siguiente XML (con formato modificado para facilitar la lectura):

<?xml version="1.0"?>
<Error xmlns="https://schemas.microsoft.com/SQL/ServiceBroker">
  <Code>12</Code>
  <Description>
    Unknown cost center "127-1000". Please check the cost center list
    and resubmit the report.
  </Description>
</Error>

Una operación de recepción recibe un mensaje de error antes que cualquier otro mensaje para ese diálogo distinto de un mensaje de temporizador de diálogo, independientemente del orden en que el mensaje de error ha llegado a la cola. Cuando una cola incluye un mensaje de temporizador de diálogo y un mensaje de error, una operación de recepción recibe el mensaje de temporizador de diálogo antes que el mensaje de error.

Una vez que un mensaje de error llega a un diálogo, el broker genera un error si una aplicación intenta enviar un mensaje en ese diálogo. Sin embargo, una aplicación puede recibir cualquier mensaje restante para el diálogo, incluso después de haber recibido un mensaje de error.

Cuando una aplicación finaliza un diálogo sin especificar un error, el broker local envía un mensaje de fin de diálogo al broker remoto. Los mensajes de fin de diálogo son mensajes de tipo https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

Los mensajes de fin de diálogo son mensajes vacíos. Una operación de recepción recibe un mensaje de fin de diálogo en el orden en que el mensaje ha llegado a la cola.

Vea también

Tareas

Cómo recuperar información de un mensaje de error de Service Broker (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005