Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os aplicativos que consomem notificações de consulta têm um conjunto comum de requisitos. A sua fonte de dados deve estar corretamente configurada para suportar notificações de consultas SQL e o utilizador deve ter as permissões corretas do lado do cliente e do servidor.
Para usar notificações de consulta, 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 seguinte fornece ligações para a documentação de Service Broker e Notificações de Consultas no SQL Server Books Online.
Documentação do SQL Server
- Criando uma consulta para notificação
- Considerações de segurança para o Service Broker
- Segurança e Proteção (Service Broker)
- Considerações de segurança para serviços de notificações
- Permissões de notificação de consulta
- Considerações internacionais para o Service Broker
- Considerações sobre o design da solução (Service Broker)
- Centro de Informações do Desenvolvedor do Service Broker
- Guia do desenvolvedor (Service Broker)
Ativar 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]);
Consultar permissões de notificações
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 superiores 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;
}
}
}
Escolher um objeto de notificação
A API de notificações de consulta fornece dois objetos para processar notificações: SqlDependency e SqlNotificationRequest.
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 lança automaticamente um thread de trabalhador para processar as notificações quando são adicionadas à fila. Também analisa a mensagem do Service Broker, expondo a informação como dados de argumentos de evento.
SqlDependency deve ser inicializado chamando o Start método para estabelecer uma dependência para o banco de dados.
Start é um método estático que precisa de ser chamado apenas uma vez durante a inicialização da aplicação para cada ligação à base 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 Service Broker suportáveis, 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.