Partilhar via


Ativando notificações de consulta

Baixar ADO.NET

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

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.

Próximos passos