Idioma
Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
SELECTcom 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.