Idioma

Habilitando notificações de consulta

Para usar notificações de consulta, configure seu banco de dados para dar suporte a elas e conceda ao principal do banco de dados as permissões necessárias.

Para usar notificações de consulta, você deve:

  • Habilitar as notificações de consulta para seu banco de dados.

  • Verificar se a ID de usuário usada para se conectar ao banco de dados tem as permissões necessárias.

  • Use SqlCommand para executar uma instrução SELECT válida com um objeto SqlNotificationRequest ou SqlDependency associado.

  • Fornecer o código para processar a notificação se os dados que estão sendo monitorados forem alterados.

Requisitos de notificações de consulta

As notificações de consulta têm suporte apenas para SELECT comandos SQL que atendem a uma lista de requisitos específicos. A tabela a seguir fornece links para a documentação do Service Broker e Notificações de Consulta nos documentos do SQL Server.

Documentação do SQL Server

Habilitando notificações de consulta para executar o código de exemplo

Para habilitar o AdventureWorks Service Broker no banco de dados usando SQL Server Management Studio, execute a seguinte instrução Transact-SQL:

ALTER DATABASE AdventureWorks SET ENABLE_BROKER;

Para que os exemplos de notificação de consulta sejam executados corretamente, as instruções Transact-SQL a seguir devem ser executadas no servidor de banco de dados.

CREATE QUEUE ContactChangeMessages;

CREATE SERVICE ContactChangeNotifications
  ON QUEUE ContactChangeMessages
([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

Permissões de notificações de consulta

Conceda à entidade de segurança do banco de dados SUBSCRIBE QUERY NOTIFICATIONS e as permissões do Service Broker exigidas pela configuração da fila. Por exemplo, substitua o espaço reservado por um usuário de banco de dados existente:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];

O .NET moderno não dá suporte à segurança de acesso ao código. Não use SqlClientPermission.Demand para autorizar notificações de consulta do SQL Server; configure as permissões do banco de dados.

Escolhendo um objeto de notificação

O suporte à notificação de consulta fornece dois objetos para processar notificações: SqlDependency e SqlNotificationRequest. Use SqlDependency para receber eventos de alteração e invalidar o cache do aplicativo. Use SqlNotificationRequest quando precisar implementar seu próprio ouvinte de notificação.

Importante

Não use System.Data.SqlClient para desenvolvimento novo. Use Microsoft.Data.SqlClient em vez disso. A classe ASP.NET Framework SqlCacheDependency requer System.Data.SqlClient e não se integra ao Microsoft.Data.SqlClient. Para novos aplicativos Microsoft.Data.SqlClient, manipule SqlDependency.OnChange e atualize o cache por meio da API de cache do aplicativo.

Como usar SqlDependency

Para usar SqlDependency, o Service Broker deverá ser habilitado para o Banco de Dados do SQL Server usado e os usuários devem ter permissões para receber notificações. Os objetos do Service Broker, como a fila de notificação, são predefinidos.

Além disso, SqlDependency inicia automaticamente um thread de trabalho para processar as notificações conforme elas são postadas na fila; ela também analisa a mensagem do Service Broker, expondo as informações como dados de argumento de evento. O SqlDependency deve ser inicializado chamando o método Start para estabelecer uma dependência com o banco de dados. Esse é um método estático que precisa ser chamado apenas uma vez durante a inicialização do aplicativo para cada conexão de banco de dados necessária. O método Stop deve ser chamado na terminação do aplicativo para cada conexão de dependência que foi feita.

Como usar SqlNotificationRequest

Por outro lado, o SqlNotificationRequest exige que você implemente toda a infraestrutura de escuta por conta própria. Além disso, todos os objetos do Service Broker de suporte, como fila, serviço e tipos de mensagem compatíveis com a fila, devem ser definidos. Essa abordagem manual será útil se o aplicativo exigir mensagens de notificação especiais ou comportamentos de notificação ou se o aplicativo fizer parte de um aplicativo de Service Broker maior.

Consulte também