Compartir a través de


Crear suscripciones a notificaciones de consulta

Suscribirse a una notificación consiste en crear un comando, adjuntarle una solicitud de notificación y, a continuación, ejecutar el comando. Las suscripciones a notificaciones de consulta se deben crear desde una interfaz de acceso a bases a datos. Transact-SQL no proporciona ningún mecanismo para crear suscripciones a notificaciones de consulta.

El Database Engine (Motor de base de datos) registra inmediatamente la notificación de la instrucción Transact-SQL en el comando. Para cada instrucción que no cumple los requisitos de una notificación de consulta, el Database Engine (Motor de base de datos) crea inmediatamente una notificación. Para aquellas instrucciones que cumplen los requisitos, se crea una suscripción. Se debe tener cuidado de no enviar un comando al servidor que contenga tanto instrucciones que cumplan los requisitos como instrucciones que no los cumplan.

[!NOTA]

Transact-SQL no proporciona ningún modo de suscribirse a notificaciones. Las clases de acceso a datos CLR alojadas en SQL Server no admiten notificaciones de consulta.

Cada suscripción a notificaciones de consulta produce un evento de notificación. Tras la notificación, SQL Server quita la suscripción a notificaciones. Por tanto, una aplicación que requiera que se le notifique de nuevo debe solicitar una nueva notificación con el comando que recupere los datos cambiados.

Solicitar una notificación de consulta no es una operación transaccional. Cuando se solicita una notificación en un comando, el Database Engine (Motor de base de datos) registra la notificación tanto si la transacción que contiene el comando se confirma o revierte como si no.

Las suscripciones a notificaciones de consulta se almacenan en la base de datos donde se ejecuta la consulta. La vista de administración dinámica sys.dm_qn_subscriptions ofrece información de las suscripciones a notificaciones de consulta que están activas. La vista de catálogo sys.internal_tables muestra el espacio utilizado por las suscripciones a notificaciones de consulta que están activas.

Elegir una estrategia de suscripción a notificaciones utilizando el proveedor administrado SqlClient

Hay dos formas de solicitar una suscripción a notificaciones. Una dependencia proporciona una interfaz de alto nivel para notificaciones de consulta. Una aplicación crea una instancia de una clase de dependencia (por ejemplo, SqlDependency en ADO.NET), registra un controlador para recibir el evento de notificación y agrega el objeto de dependencia a un comando de consulta. El objeto de dependencia llama al controlador cuando tiene lugar la notificación.

Una solicitud de notificación proporciona una interfaz de bajo nivel más flexible para notificaciones de consulta. Al igual que una dependencia, una aplicación crea una solicitud de notificación (por ejemplo, una instancia de SqlNotificationRequest en ADO.NET) y adjunta la solicitud de notificación a un comando de consulta. A diferencia de una dependencia, una solicitud de notificación sólo solicita una suscripción a notificaciones para la consulta. La aplicación en sí debe recuperar mensajes de notificación de la base de datos, procesarlos y actuar en consecuencia. Esto permite más flexibilidad en el diseño de la aplicación, pero requiere un poco más de esfuerzo. Una solicitud de notificación resulta adecuada para aplicaciones que requieren flexibilidad en el control de notificaciones. Por ejemplo, una aplicación que se ejecuta según una programación no puede utilizar una dependencia, ya que el objeto de dependencia se destruye cuando se cierra la aplicación. En cambio, con una solicitud de notificación, la aplicación puede comprobar la cola al inicio y actualizar la caché de datos local si es necesario.

Las aplicaciones utilizan una dependencia cuando la aplicación que registra la suscripción de notificación es también la aplicación que procesará la notificación, cuando la aplicación permanece en ejecución permanente y cuando la conectividad con la base de datos está disponible mientras la aplicación se está ejecutando. En el caso de aplicaciones que cumplen estos requisitos, las dependencias constituyen un modo fácil de utilizar notificaciones de consulta. Las aplicaciones utilizan una solicitud de notificación cuando la aplicación no puede utilizar una dependencia. En este caso, el programador de la aplicación debe diseñar una estrategia para recibir y procesar mensajes que tenga sentido para la aplicación.

Usar SOAP para las notificaciones

La compatibilidad nativa con HTTP SOAP incluye la compatibilidad con notificaciones de consulta. Una solicitud SOAP que incluya el encabezado <notificationRequest> crea una suscripción a notificaciones para una consulta. Al igual que con SqlNotificationRequest, el solicitante debe recuperar mensajes de notificación de la base de datos, procesarlos y actuar en consecuencia. Este sistema resulta adecuado para aplicaciones de servicios Web, puesto que no requiere una conexión continua a SQL Server.

Usar SQL Server Native Client para las notificaciones

Las aplicaciones que utilizan el controlador ODBC o el proveedor OLE DB de SQL Server Native Client también pueden enviar solicitudes de notificación. Para obtener información sobre el uso de notificaciones de consulta con aplicaciones de SQL Server Native Client, vea Trabajar con notificaciones de consulta.