Solucionar problemas de enrutamiento y entrega de mensajes

En esta sección se proporcionan sugerencias para corregir problemas habituales relacionados con el enrutamiento y la entrega de mensajes.

Síntoma: los mensajes permanecen en la cola de transmisión

Asegúrese de que la entrega de mensajes de Service Broker está activada en la base de datos. La columna is_broker_enabled de sys.databases muestra si la entrega de mensajes de Service Broker está activada, como se muestra en el siguiente ejemplo:

SELECT is_broker_enabled FROM sys.databases
WHERE database_id = DB_ID() ;

La entrega de mensajes de Service Broker se puede desactivar para evitar que los mensajes se entreguen a la base de datos incorrecta. Para obtener más información acerca de la entrega de mensajes de Service Broker, vea Administrar identidades de Service Broker. Para obtener más información acerca de la activación de la entrega de mensajes de Service Broker, vea Cómo activar la entrega de mensajes de Service Broker en las bases de datos (Transact-SQL).

Si la entrega de mensajes de Service Broker está activa, compruebe los mensajes en la columna transmission_status de la vista de catálogo sys.transmission_queue. Entre los mensajes de error más comunes se incluyen:

Mensaje Descripción

Ninguna ruta coincide con el nombre del servicio.

Service Broker no ha podido localizar ninguna ruta al servicio especificado.

El Service Broker de destino está inaccesible.

Service Broker no ha podido entregar el mensaje al broker del servicio de destino.

La capa de transporte no está disponible.

No existe ningún extremo de Service Broker en la instancia o el extremo de Service Broker no se inició correctamente.

La cola de destino está deshabilitada.

La cola que utiliza el servicio de destino tiene la opción STATUS establecida en OFF. Service Broker no agrega mensajes nuevos a una cola con un STATUS de OFF.

Error al recibir datos: '10054 (el host remoto forzó el cierre de la conexión existente)'.

El lado remoto de la conversación ha aceptado la conexión TCP/IP pero la ha cerrado antes de permitir que se enviara un mensaje.

(Ninguno)

Service Broker aún no ha intentado enviar el mensaje. Esto puede indicar que la entrega de mensajes de Service Broker no está activada en la base de datos.

Síntoma: existe una ruta pero el estado de transmisión muestra que no hay ninguna ruta para el servicio

Si la ruta se ha creado después del mensaje, la causa más habitual de este síntoma es que el mensaje no se ha vuelto a intentar después de haber creado la ruta. Para obtener más información acerca de los reintentos, vea Enrutamiento y redes de Service Broker.

Compruebe que el nombre de servicio especificado en el mensaje coincide exactamente con el nombre de servicio especificado en la ruta. Service Broker usa una comparación binaria byte a byte en la coincidencia de nombres de servicio. Si una ruta que especifica el nombre de servicio existe, se puede comprobar esta comparación con una consulta similar a la siguiente:

SELECT N'No Exact Match' = tq.to_service_name
FROM sys.transmission_queue AS tq
WHERE NOT EXISTS
    (SELECT remote_service_name
     FROM sys.routes AS routes
     WHERE tq.to_service_name = routes.remote_service_name) ;

Los nombres de servicio que aparecen en el conjunto de resultados no tienen una coincidencia exacta en la tabla de enrutamiento de la base de datos. Observe que una ruta que no especifica un nombre de servicio coincide con cualquier nombre de servicio. Para obtener más información sobre el enrutamiento, vea Enrutamiento de Service Broker.

Si el mensaje especifica un identificador de instancia de broker, compruebe que la ruta especifica el mismo identificador o que no especifica ninguno.

Compruebe que la ruta no ha caducado. La columna de duración de la vista de catálogo sys.routes contiene la hora y fecha de caducidad de la ruta.

Síntoma: el estado de transmisión muestra que no se puede obtener acceso al Service Broker de destino

El destino no ha aceptado el mensaje. Esto puede indicar que el nombre de servicio especificado no coincide con el nombre de ningún servicio que aloja la instancia de destino de SQL Server o que el destino no contiene ninguna ruta para el servicio. Para solucionar este problema, compruebe la configuración del servicio y el enrutamiento para el destino.

Síntoma: el estado de transmisión muestra que la capa de transporte no está disponible

Compruebe si existe un extremo de Service Broker y que el estado del extremo es STARTED. Si no es así, cree un extremo. Para obtener más información acerca de los extremos de Service Broker, vea Extremos de Service Broker. Para obtener más información acerca de la creación de un extremo, vea Cómo activar la comunicación en red de Service Broker (Transact-SQL).

Síntoma: el estado de transmisión muestra que el host remoto ha impuesto el cierre de una conexión existente

La seguridad de transporte puede estar mal configurada o la dirección TCP/IP de la ruta especifica un puerto que está utilizando un servicio distinto de Service Broker. Tenga en cuenta que Service Broker no utiliza el protocolo de secuencia de datos tabular. La ruta debe especificar el puerto que utiliza el extremo de Service Broker en la instancia remota de SQL Server.

Compruebe la configuración del extremo de Service Broker para asegurarse de que las dos instancias tienen parámetros de seguridad de red compatibles. Si el extremo de Service Broker para una instancia especifica REQUIRED o ENABLED, el extremo de Service Broker para la otra instancia no puede especificar NONE.

Compruebe los certificados, los usuarios y los permisos de la seguridad de transporte de Service Broker. La configuración para la seguridad de transporte se explica en el tema Seguridad de transporte de Service Broker.

Vea también

Tareas

Cómo activar la comunicación en red de Service Broker (Transact-SQL)

Conceptos

Enrutamiento y redes de Service Broker
Extremos de Service Broker
Enrutamiento de Service Broker
Iniciar y detener la cola

Otros recursos

sys.databases (Transact-SQL)
sys.transmission_queue (Transact-SQL)
sys.routes (Transact-SQL)
sys.service_broker_endpoints (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005