Compartir a través de


Habilitación de notificaciones de consulta (ADO.NET)

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

Crear una consulta de notificación

Crear una consulta de notificación

Consideraciones de seguridad para Service Broker

Seguridad y protección (Service Broker)

Consideraciones de seguridad para Notification Services

Permisos de notificaciones de consulta

Consideraciones internacionales para Service Broker

Consideraciones (Service Broker) de diseño de soluciones

Centro de información del programador de Service Broker

Manual del desarrollador (Service Broker)

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.

Vea también

Otros recursos

Notificaciones de consulta en SQL Server (ADO.NET)