【问题标题】:Notifying app from SqlServer从 SqlServer 通知应用程序
【发布时间】:2009-03-20 13:49:05
【问题描述】:

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

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

数据库:SqlServer2005 或 2008,业务层:C#

【问题讨论】:

  • 缓存了什么样的数据以及在哪里? SQL Server 复制如何破坏您的应用程序以及您尝试过哪种复制?
  • 在客户端缓存已完成的事务通常没有意义。实际上,“已完成”应该定义为“已在数据库中交易”。您是否以其他方式实现了它?

标签: c# sql sql-server triggers replication


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    【解决方案3】:

    Sql Cache Invalidation 可能会有所帮助。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多