Lenguaje
Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para usar notificaciones de consulta, configure su base de datos para que las admita y conceda a la entidad de seguridad de la base de datos los permisos requeridos.
Para usar las notificaciones de consulta, debe:
Habilitar las notificaciones de consulta para la base de datos.
Asegurarse de que el identificador de usuario usado para conectarse a la base de datos tiene los permisos necesarios.
Use SqlCommand para ejecutar una instrucción
SELECTválida con un objeto SqlDependency o SqlNotificationRequest asociado.Proporcionar código para procesar la notificación si los datos que se supervisan cambian.
Requisitos de las notificaciones de consulta
Las notificaciones de consulta solo se admiten para instrucciones SELECT que cumplan una lista de requisitos específicos. En la tabla siguiente se proporcionan vínculos a la documentación de Service Broker y Notificaciones de consulta en los documentos de SQL Server.
Documentación de SQL Server
Habilitación de notificaciones de consulta para ejecutar código de ejemplo
Para habilitar Service Broker en la AdventureWorks base de datos mediante SQL Server Management Studio, ejecute la siguiente instrucción Transact-SQL:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Para que los ejemplos de notificaciones de consulta se ejecuten correctamente, se deben ejecutar las siguientes instrucciones Transact-SQL en el servidor de base de datos.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Permisos de notificaciones de consulta
Conceda a la entidad de seguridad de la base de datos SUBSCRIBE QUERY NOTIFICATIONS y los permisos de Service Broker requeridos por la configuración de su cola. Por ejemplo, reemplace el marcador de posición por un usuario de base de datos existente:
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];
Las versiones modernas de .NET no admiten la seguridad de acceso del código. No utilice SqlClientPermission.Demand para autorizar las notificaciones de consulta; configure los permisos de la base de datos en su lugar.
Elección de un objeto de notificación
La compatibilidad con notificaciones de consulta proporciona dos objetos para procesar notificaciones: SqlDependency y SqlNotificationRequest. Use SqlDependency para recibir eventos de cambio e invalidar la caché de su aplicación. Use SqlNotificationRequest cuando necesite implementar su propio agente de escucha de notificaciones.
Importante
No use System.Data.SqlClient para desarrollos nuevos. Use Microsoft.Data.SqlClient en su lugar. La clase ASP.NET Framework SqlCacheDependency requiere System.Data.SqlClient y no se integra con Microsoft.Data.SqlClient. Para las nuevas aplicaciones de Microsoft.Data.SqlClient, gestione SqlDependency.OnChange y actualice la caché a través de la API de caché de su aplicación.
Uso de SqlDependency
Para usar SqlDependency, Service Broker debe estar habilitado en la base de datos de SQL Server que se vaya a usar y los usuarios deben tener permisos para recibir notificaciones. Los objetos de Service Broker, como la cola de notificación, están predefinidos.
Además, SqlDependency inicia automáticamente un subproceso de trabajo para procesar las notificaciones que se publican en la cola; también analiza el mensaje de Service Broker y expone la información en forma de datos de argumento de evento.
SqlDependency se debe inicializar llamando al método Start para establecer una dependencia en la base de datos. Se trata de un método estático al que se debe llamar solo una vez durante la inicialización de la aplicación para cada conexión de base de datos necesaria. Se debe llamar al método Stop en la finalización de la aplicación para cada conexión de dependencia realizada.
Utilización de SqlNotificationRequest
Por el contrario, SqlNotificationRequest requiere que implemente toda la infraestructura de escucha. Además, se deben definir todos los objetos auxiliares de Service Broker, como la cola, el servicio y los tipos de mensajes admitidos por la cola. Este enfoque manual es útil si la aplicación requiere mensajes de notificación o comportamientos de notificación especiales, o si la aplicación forma parte de una aplicación Service Broker mayor.