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.
Las aplicaciones que consumen notificaciones de consulta poseen un conjunto común de requisitos. El origen de datos se debe configurar correctamente para que admita notificaciones de consulta SQL y el usuario debe contar con los permisos adecuados en el cliente y el servidor.
Para utilizar notificaciones de consulta, es necesario:
Utilizar SQL Server 2005 o SQL Server 2008.
Habilitar las notificaciones de consulta en la base de datos.
Asegurarse de que el id. de usuario utilizado para conectarse a la base de datos dispone de los permisos necesarios.
Utilizar un objeto SqlCommand para ejecutar una instrucción SELECT válida con un objeto de notificación asociado, SqlDependency o SqlNotificationRequest.
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 son compatibles con las instrucciones SELECT que cumplen ciertos requisitos específicos. En la tabla siguiente se proporcionan vínculos a la documentación sobre Service Broker y las notificaciones de consulta de los Libros en pantalla de SQL Server.
Libros en pantalla de SQL Server 2005 |
Libros en pantalla de SQL Server 2008 |
---|---|
Habilitar las notificaciones de consulta para ejecutar código de ejemplo
Para habilitar Service Broker en la base de datos AdventureWorks a través de SQL Server Management Studio, ejecute la siguiente instrucción Transact-SQL:
ALTER DATABASE AdventureWorks SET ENABLE_BROKER;
Para que el ejemplo de notificación de consulta funcione correctamente, es necesario ejecutar las siguientes instrucciones Transact-SQL en el servidor de bases de datos.
CREATE QUEUE ContactChangeMessages;
CREATE SERVICE ContactChangeNotifications
ON QUEUE ContactChangeMessages
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);
Permisos de notificaciones de consulta
Los usuarios que ejecutan comandos solicitando notificaciones deben disponer del permiso de base de datos SUBSCRIBE QUERY NOTIFICATIONS en el servidor.
El código de cliente que se ejecuta en una situación de confianza parcial necesita el SqlClientPermission.
El código siguiente crea un objeto SqlClientPermission, estableciendo PermissionState en Unrestricted. Demand fuerza SecurityException en tiempo de ejecución si todos los llamadores situados en la parte superior de la pila de llamadas no disponen del permiso.
' Code requires directives to
' System.Security.Permissions and
' System.Data.SqlClient
Private Function CanRequestNotifications() As Boolean
Dim permission As New SqlClientPermission( _
PermissionState.Unrestricted)
Try
permission.Demand()
Return True
Catch ex As Exception
Return False
End Try
End Function
// Code requires directives to
// System.Security.Permissions and
// System.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
Elección de un objeto de notificación
La API de notificaciones de consulta proporciona dos objetos para procesar las notificaciones: SqlDependency y SqlNotificationRequest. En general, la mayoría de las aplicaciones que no son ASP.NET deben utilizar el objeto SqlDependency. Las aplicaciones ASP.NET deben utilizar la SqlCacheDependency de nivel más alto, que abarca SqlDependency y proporciona un marco para administrar los objetos de notificación y de caché.
Utilizar SqlDependency
Para utilizar SqlDependency, debe estar habilitado Service Broker 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 notificaciones, 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. Para inicializar SqlDependency, es necesario llamar al método Start para establecer una dependencia con la base de datos. Se trata de un método estático que solo es necesario llamar una vez durante la inicialización de la aplicación en cada conexión a la base de datos necesaria. Se debe llamar al método Stop después de terminar la aplicación para cada conexión de dependencia que se haga.
Utilizar SqlNotificationRequest
Por el contrario, SqlNotificationRequest exige que implemente usted mismo toda la infraestructura de escucha. Además, es necesario definir todos los objetos de Service Broker compatibles, como la cola, los servicios y los tipos de mensajes que admite la cola. Este enfoque manual resulta de utilidad si la aplicación necesita mensajes o comportamientos de notificación especiales, o si la aplicación forma parte de una aplicación de Service Broker más grande.