Partilhar via


Obtendo notificações

Muitos aplicativos não precisam conter código para poderem receber ou processar notificações de consulta. Quando a assinatura de notificação é gerenciada por um objeto SqlDependency , esse objeto monitora automaticamente a assinatura. Quando chega uma mensagem de notificação, o objeto SqlDependency chama o manipulador de eventos registrado no objeto SqlDependency . Com esta abordagem, não há nenhum trabalho especial necessário para receber a notificação. Um aplicativo que use o SqlDependency não precisa receber ou processar mensagens de notificação.

Por outro lado, se o aplicativo usar uma solicitação de notificação, o aplicativo deve monitorar a fila e reagir à mensagem de notificação. Neste caso, você escreve um aplicativo que processa mensagens para o serviço que recebe as notificações. O aplicativo que solicita a notificação pode ser o mesmo aplicativo que processa a mensagem, ou você pode escrever outro aplicativo para receber e reagir à mensagem de notificação de consulta.

SQL Server localiza assinaturas de notificação usando uma combinação da ID de notificação e a atual consulta atual enviada. Se um aplicativo solicita uma notificação para duas consultas diferentes usando a mesma ID de notificação, o SQL Server cria duas assinaturas com a mesma ID de notificação. Entretanto, se um aplicativo solicitar duas vezes uma notificação para a mesma consulta com a mesma ID de notificação, o SQL Server cria uma única assinatura com o tempo de expiração especificado na segunda solicitação.

Os aplicativos sendo executados no banco de dados são tipicamente procedimentos armazenados ativados pela fila quando uma mensagem chega. Estes procedimentos armazenados podem ser escritos em Transact-SQL ou em uma das linguagens .NET. Abordagens menos comuns incluem executar o aplicativo como se fosse um trabalho agendado ou usando uma tarefa de inicialização para executar um procedimento armazenado continuamente no plano de fundo.

Os aplicativos sendo executados tipicamente fora do banco de dados usam um das seguintes abordagens para receber mensagens:

  • O aplicativo poderá sondar a fila periodicamente para ver se alguma mensagem chegou.

  • O aplicativo pode usar a cláusula WAITFOR da instrução RECEIVE para bloquear a execução de um lote ou procedimento armazenado em uma instrução RECEIVE até que a instrução retorne uma linha pelo menos.

  • O aplicativo pode criar uma notificação de eventos para o evento QUEUE_ACTIVATION da fila que recebe a notificação. O aplicativo pode então monitorar o serviço que recebe o evento de ativação que usa uma das duas estratégias anteriores.

Abordagens menos comuns incluem monitorar a ativação da fila usando WLI, ou escrever um procedimento armazenado CLR (Common Language Runtime) que faça alguma ação externa em resposta à mensagem.

Em razão dos diálogos de notificação de consulta sempre conterem uma única mensagem de notificação, um aplicativo que processe notificações de consulta deve terminar a conversação após receber uma mensagem. Caso contrário, o diálogo eventualmente expira. Quando um diálogo de notificação de consulta expira, o SQL Server anota o erro de diálogo no log de erros SQL Server.

Para obter mais informações sobre como escrever um aplicativo que usa o Agente de Serviços, consulte Benefícios de programar com o Service Broker. Para obter mais informações sobre como iniciar um aplicativo que usa o Agente de Serviços, consulte Escolhendo uma estratégia de inicialização.

Consulte também

Referência

Conceitos