Уведомление приложения от SqlServer - PullRequest
2 голосов
/ 20 марта 2009

Учитывая типичное трехуровневое приложение, развернутое на двух удаленных сайтах. БД, стоящая за двумя установками, содержит абсолютно одинаковую структуру и одинаковые данные. Должен быть механизм репликации между двумя внутренними базами данных, чтобы синхронизировать их. Встроенная функция репликации SqlServer сделает эту работу. Тем не менее, бизнес-уровень приложения хранит много данных в кэше. Если я использую репликацию на уровне базы данных, кеш на бизнес-уровне не синхронизируется.

Есть ли способ создания триггеров SQL, которые уведомляют бизнес-уровень об изменениях?

БД: SqlServer2005 или 2008, бизнес-уровень: C #

Ответы [ 4 ]

1 голос
/ 20 марта 2009

Сложный вариант A: Если у вас есть статический IP-адрес, вы можете использовать WCF (TCP / IP или SOAP) в приложении и вызывать его с помощью SQL CLR , в противном случае вы можете использовать WCF Peer-to -Perer хотя это может быть сложно с ограничениями SQL CLR. Чтобы продвинуться еще дальше, вы можете попросить SQL CLR обратиться к локальной программе, которая затем скажет остальным обновиться.

Упрощенный вариант B: сайт A очищает кэш на его стороне и устанавливает флаг в БД, репликация SQL захватывает его, сообщает сайту B, который очищает его кэш и флаг. Кэш очищается любым сайтом при обнаружении несоответствия.

0 голосов
/ 23 марта 2009

Я использовал очередь сообщений для этой функции. Это решение также справляется с простоями между приложениями. Просто убедитесь, что вы создали очередь как транзакционную очередь, чтобы обеспечить сохранение сообщений в случае сбоя питания.

См. http://www.codeproject.com/KB/database/SqlMSMQ.aspx для примера того, как использовать его в SQL Server 2005.

0 голосов
/ 20 марта 2009

Sql Cache Invalidation может помочь.

...