Idioma

Ativando notificações de consulta

Para usar notificações de consulta, configure a sua base de dados para as suportar e conceda ao principal da base de dados as permissões necessárias.

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

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

  • Verifique se o ID de usuário usado para se conectar ao banco de dados tem as permissões necessárias.

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

  • Forneça código para processar a notificação se os dados que estão sendo monitorados mudarem.

Requisitos de notificações de consulta

As notificações de consulta são suportadas apenas para SELECT declarações que cumprem uma lista de requisitos específicos. A tabela a seguir fornece links para a documentação do Service Broker e das Notificações de Consulta nos documentos do SQL Server.

Documentação do SQL Server

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

Para ativar o Service Broker na AdventureWorks base 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 ao principal da base de dados SUBSCRIBE QUERY NOTIFICATIONS e ao Service Broker as permissões exigidas pela configuração da sua fila. Por exemplo, substitua o marcador de posição por um utilizador existente da base de dados:

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [<database_user>];

O .NET moderno não suporta Code Access Security. Não use SqlClientPermission.Demand para autorizar notificações de consulta; configure permissões de base de dados em vez disso.

Escolhendo um objeto de notificação

O suporte a notificações de consulta fornece dois objetos para processar notificações: SqlDependency e SqlNotificationRequest. Use SqlDependency para receber eventos de alteração e invalidar a cache da sua aplicação. Utilize SqlNotificationRequest quando precisar de implementar o seu próprio listener de notificações.

Importante

Não uses System.Data.SqlClient para novo desenvolvimento. Utilize Microsoft.Data.SqlClient em vez disso. A classe ASP.NET Framework SqlCacheDependency requer System.Data.SqlClient e não se integra com Microsoft.Data.SqlClient. Para as novas aplicações Microsoft.Data.SqlClient, trate SqlDependency.OnChange e atualize a cache através da API de cache da sua aplicação.

Usando SqlDependency

Para usar SqlDependency, o Service Broker deve estar ativado na base de dados do SQL Server em utilização, e os utilizadores devem ter permissões para receber notificações. Os objetos do Service Broker, como a fila de notificações, são predefinidos.

Além disso, SqlDependency inicia automaticamente um thread de trabalho para processar notificações à medida que são postadas na fila, além de analisar a mensagem do Service Broker, expondo as informações como dados de argumento de evento. SqlDependency deve ser inicializado chamando o Start método para estabelecer uma dependência para o banco de dados. Este é 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 Stop método deve ser chamado no encerramento do aplicativo para cada conexão de dependência que foi feita.

Usando SqlNotificationRequest

Em contrapartida, SqlNotificationRequest requer que você mesmo implemente toda a infraestrutura de escuta. Além disso, todos os objetos do Service Broker de suporte, como a fila, o serviço e os tipos de mensagem suportados pela fila, devem ser definidos. Essa abordagem manual é útil se seu aplicativo exigir mensagens de notificação especiais ou comportamentos de notificação, ou se seu aplicativo fizer parte de um aplicativo Service Broker maior.

Ver também