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.
Os aplicativos que consomem notificações de consulta têm um conjunto comum de requisitos. Sua fonte de dados deve ser 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:
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.
Use um SqlCommand objeto para executar uma instrução SELECT válida com um objeto de notificação associado, seja SqlDependency ou SqlNotificationRequest.
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 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 documentos do SQL Server.
Documentação do SQL Server
Habilitando notificações de consulta para executar 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, definindo o PermissionState para o 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 aplicações devem usar o SqlCacheDependency de nível superior, que envolve SqlDependency e fornece uma estrutura para administrar os objetos de notificação e cache.
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.