从SqlServer通知应用程序

时间:2009-03-20 13:49:06

标签: c# sql sql-server triggers replication

鉴于在两个远程站点部署了典型的3层应用程序。两个安装后面的数据库包含完全相同的结构和相同的数据。需要在两个后端数据库之间建立复制机制以使它们保持同步。 SqlServer的本机复制功能可以完成这项工作。但是,应用程序的业务层会保留大量缓存的数据。如果我使用数据库级复制,业务层中的缓存将不同步。

有没有办法创建SQL触发器来通知业务层有关更改?

DB:SqlServer2005或2008,业务层:C#

4 个答案:

答案 0 :(得分:1)

复杂选项A:如果您有静态IP,您可以在应用程序中使用WCF(TCP / IP或SOAP)并使用SQL CLR进行调用,否则您可以使用WCF Peer-to-Peer尽管可能很难具有SQL CLR的限制。为了更进一步,您可以让SQL CLR与本地程序通信,然后告诉其他人更新。

更简单的选项B:站点A清除它旁边的缓存并在数据库中设置一个标志,SQL复制抓取它,通知站点B清除它的缓存和标志。每当发现差异时,任一站点都会清除缓存。

答案 1 :(得分:1)

答案 2 :(得分:0)

Sql Cache Invalidation可能会有所帮助。

答案 3 :(得分:0)

我已使用消息队列来实现此功能。此解决方案还可以应对应用程序之间的停机时间。只需确保将队列创建为事务性队列,以确保在发生电源故障时保存消息。

有关如何在SQL Server 2005上使用它的示例,请参阅http://www.codeproject.com/KB/database/SqlMSMQ.aspx