Habilitando notificações de consulta
Os aplicativos que consomem notificações de consulta têm um conjunto comum de requisitos. Sua fonte de dados deve ser configurada corretamente para ser compatível com as notificações de consulta SQL e o usuário deve ter as permissões corretas do lado do cliente e do lado do servidor.
Para usar notificações de consulta, você precisa:
- 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.
- Usar um objeto SqlCommand para executar uma instrução SELECT válida com um objeto de notificação associado – seja SqlDependency ou SqlNotificationRequest.
- 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 são compatíveis apenas com instruções SELECT que atendem a 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 Manuais Online do SQL Server.
documentação do SQL Server
- Criando uma consulta para notificação
- Considerações de segurança para Service Broker
- Segurança e proteção (Service Broker)
- Considerações de segurança para serviços de notificação
- Permissões de notificação de consulta
- Considerações internacionais para Service Broker
- Considerações sobre design de solução (Service Broker)
- Service Broker Developer InfoCenter
- Guia do desenvolvedor (Service Broker)
Como habilitar notificações de consulta para executar o código de exemplo
Para habilitar o Service Broker no banco de dados AdventureWorks usando o 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
Os usuários que executam comandos solicitando notificação devem ter a permissão de banco de dados SUBSCRIBE QUERY NOTIFICATIONS no servidor.
O código do lado do cliente que é executado em uma situação de confiança parcial requer o SqlClientPermission.
O código a seguir cria um objeto SqlClientPermission, configurando o PermissionState como Unrestricted. O Demand forçará um SecurityException em tempo de execução se todos os chamadores mais acima na pilha de chamadas não tiverem recebido a permissão.
using Microsoft.Data.SqlClient;
using System.Security.Permissions;
class Program
{
static void Main()
{
}
// Code requires directives to
// System.Security.Permissions and
// Microsoft.Data.SqlClient
private bool CanRequestNotifications()
{
SqlClientPermission permission =
new SqlClientPermission(
PermissionState.Unrestricted);
try
{
permission.Demand();
return true;
}
catch (System.Exception)
{
return false;
}
}
}
Como escolher um objeto de notificação
A API de notificações de consulta fornece dois objetos para processar notificações: SqlDependency e SqlNotificationRequest.
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. Ele também analisa a mensagem do Service Broker, expondo as informações como dados de argumento do evento. O SqlDependency deve ser inicializado chamando o método Start
para estabelecer uma dependência com o banco de dados. Start
é 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 os tipos de mensagem, de fila e de serviço com suporte da 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.
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de