Alterar notificação com o Sql Server 2008

Eu tenho um aplicativo que consiste em um database e vários serviços. Um desses serviços adiciona informações ao database (acionado por um usuário).

Outro serviço consulta periodicamente os bancos de dados em busca de alterações e usa os novos dados como input para processamento.

Até agora eu usei um timer configurável que consulta o database a cada 30 segundos ou mais. Eu li sobre Sql 2005 com notificação de alterações. No entanto, no Sql 2008, esse recurso está obsoleto.

Qual é a melhor maneira de ser notificado de alterações que ocorreram no database diretamente no código? quais são as melhores práticas?

O Notification Services foi descontinuado, mas você não quer usá-lo de qualquer maneira.

Você pode considerar mensagens do Service Broker em alguns cenários; os detalhes dependem do seu aplicativo.

Na maioria dos casos, você provavelmente pode usar SqlDependency ou SqlCacheDependency. A maneira como eles funcionam é que você inclui um object SqlDependency com sua consulta quando você a emite. A consulta pode ser um único SELECT ou um grupo complexo de comandos em um procedimento armazenado.

Algum tempo depois, se outro servidor da Web ou usuário ou página da Web fizer uma alteração no database que possa fazer com que os resultados da consulta anterior sejam alterados, o SQL Server enviará uma notificação a todos os servidores que tiverem objects SqlDependency registrados. Você pode registrar o código para ser executado quando esses events chegarem, ou o evento pode simplesmente limpar uma input no Cache.

Embora você precise ativar o Service Broker para usar o SqlDependency, não é necessário interagir explicitamente com ele. No entanto, você também pode usá-lo como um mecanismo alternativo; pense nisso como um sistema de mensagens persistente que garante a ordem das mensagens e a entrega única.

Os detalhes de como usar esses sistemas são um pouco longos para um post no fórum. Você pode usar o Google para eles ou eu também forneço exemplos em meu livro ( Ultra-Fast ASP.NET ).

Sim, esta postagem no blog explica que o Notification Services está obsoleto e também quais são as substituições ou alternativas daqui para frente.

Para seus propósitos – ser notificado de alterações ocorridas na dataase – parece que você deseja o SQL Server Change Tracking . Mas a notificação é um modelo de recepção – seu aplicativo precisa fazer a consulta na tabela de alterações.

Não consegui descobrir se o SqlDependency continua a funcionar com o Notification Services descontinuado.

Há várias formas diferentes de rastrear alterações no database: por gatilhos que mantêm estruturas temporais como atrasos, registros de rastreamento (também conhecidos como ‘tabelas de auditoria’) ou usando os resources de rastreamento de alterações no SQL 2008 como referências em outra resposta. Independentemente do mecanismo que você usa, você tem o problema de notificar seu serviço interno da alteração. Para isso, você pode usar o Service Broker e a ativação baseada em events. Pelo que você descreve, parece que o aplicativo espera em um evento da fila. http://msdn.microsoft.com/pt-br/library/ms171581.aspx

Se você não deseja que o serviço permaneça e permaneça na fila, é possível investigar a ativação do serviço em tempo de vida sob demanda usando o mecanismo de ativação externo no intermediário de serviços.

Você pode usar o System.Data.SqlClient.SqlDependency (que funciona com o Service Broker ativado) para assinar as alterações em uma tabela.