Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os aplicativos que consomem notificações de consulta têm um conjunto comum de requisitos. Sua fonte de dados deve estar configurada corretamente para dar suporte a 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ê 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.
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 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 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 altos na pilha de chamadas não tiverem recebido a permissão.
// 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;
}
}
' 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
Escolhendo um objeto de notificação
A API de notificações de consulta fornece dois objetos para processar notificações: SqlDependency e SqlNotificationRequest. Em geral, a maioria dos aplicativos non-ASP.NET deve usar o SqlDependency objeto. ASP.NET aplicativos devem usar o nível SqlCacheDependencysuperior, que encapsula SqlDependency e fornece uma estrutura para administrar os objetos de notificação e cache.
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.