Criando assinaturas em notificações de consulta
A assinatura em uma notificação é uma questão de criar um comando, anexando uma solicitação de notificação ao comando e, depois, executando o comando. Inscrições de notificação de consulta devem ser criadas a partir de uma interface de acesso de banco de dados. O Transact-SQL não fornece um mecanismo para criar assinaturas de notificação de consulta.
O Mecanismo de Banco de Dados registra imediatamente a notificação para a instrução de Transact-SQL no comando. Para cada instrução que não satisfaz os requisitos de uma notificação de consulta, o Mecanismo de Banco de Dados cria imediatamente uma notificação. Para essas instruções que satisfazem os requisitos, é criada uma assinatura. Deve-se tomar cuidado para evitar o envio de um comando ao servidor que contenha as duas instruções que satisfazem os requisitos e as instruções que não satisfazem os dois requisitos.
Observação |
---|
O Transact-SQL não fornece um modo para inscrever notificações. As classes de acesso de dados CLR hospedas no SQL Server não dão suporte a notificações de consulta. |
Cada assinatura de notificação de consulta produz um evento de notificação. Depois da notificação, o SQL Server remove a assinatura de notificação. Portanto, um aplicativo que precisa ser notificado novamente deve solicitar uma nova notificação com o comando que recupera os dados alterados.
A solicitação de uma notificação de consulta não é transacional. Quando você solicita uma notificação em um comando, o Mecanismo de Banco de Dados registra a notificação se a transação que contém ou não o comando faz a confirmação ou reversão.
São armazenadas as assinaturas de notificações de consulta no banco de dados onde a consulta é executada. A exibição de gerenciamento dinâmico sys.dm_qn_subscriptions apresenta informações sobre as assinaturas de notificação de consulta atualmente ativas. A exibição do catálogo sys.internal_tables mostra o espaço usado pelas assinaturas de notificação de consulta atualmente ativas.
Escolhendo uma estratégia de assinatura de notificação que usa o provedor gerenciado SqlClient
Há duas maneiras para solicitar uma assinatura de notificação. Uma dependência fornece uma interface de alto nível para examinar as notificações. Um aplicativo simplesmente cria uma instância de uma classe de dependência (por exemplo, SqlDependency em ADO.NET), registra um manipulador para receber o evento de notificação e adiciona o objeto de dependência a um comando de consulta. O objeto de dependência chama o manipulador quando ocorre a notificação.
Uma solicitação de notificação fornece uma interface de nível-inferior, mais flexível para consultar notificações. Como uma dependência, um aplicativo cria uma solicitação de notificação (por exemplo, uma instância de SqlNotificationRequest em ADO.NET) e anexa a solicitação de notificação ao comando de consulta. Ao contrário de uma dependência, uma solicitação de notificação simplesmente pede uma assinatura de notificação para a consulta. O próprio aplicativo deve recuperar mensagens de notificação do banco de dados, deve processar as mensagens e deve reagir de acordo. Isso permite mais flexibilidade no design de aplicativo, mas requer um pouco mais de esforço. Uma solicitação de notificação é adequada para aplicativos que necessitam de flexibilidade ao controlar notificações. Por exemplo, um aplicativo executado de forma agendada não pode usar uma dependência, uma vez que o objeto de dependência é destruído no fechamento do aplicativo. Com uma solicitação de notificação, porém, o aplicativo pode inspecionar a fila ao ser iniciado e pode atualizar o cache de dados local, se necessário.
Aplicativos usam uma dependência quando o aplicativo que registra a assinatura de notificação também é o aplicativo que processa a notificação, quando o aplicativo permanece em contínua execução, e quando a conectividade com o banco de dados está disponível durante a execução do aplicativo. Para aplicativos que satisfazem esses requisitos, as dependências fornecem um modo fácil de usar as notificações de consulta. Aplicativos usam uma solicitação de notificação quando o aplicativo não conseguir usar uma dependência. Nesse caso, o desenvolvedor de aplicações deve projetar uma estratégia para receber e processar mensagens que fazem sentido para o aplicativo.
Usando SOAP em notificações
Suporte a HTTP SOAP nativo inclui suporte a notificações de consulta. Uma solicitação de SOAP que inclui o cabeçalho < notificationRequest> cria uma assinatura de notificação para uma consulta. Como em SqlNotificationRequest, o solicitante deve recuperar as mensagens de notificação do banco de dados, processar as mensagens e reagir de acordo. Essa abordagem é bem apropriada para aplicativos de serviço da Web, visto que não requer uma conexão contínua com o SQL Server.
Usando SQL Server Native Client em notificações
Aplicativos que usam o provedor SQL Server Native Client OLE DB ou o driver ODBC também podem enviar solicitações de notificação. Para obter informações sobre como usar notificações de consulta com aplicativos do SQL Server Native Client, consulte Trabalhando com notificações de consulta.