.net – 当表中的数据发生变化时,SqlCacheDependency如何知道何时与任何侦听器进行通信?

我一直在做一些研究,我可以看到这个系统的大部分管道,但是我不知道sql服务器如何知道何时在表中的数据发生变化时将消息发送回任何监听器(应用程序).我将从解释我理解的内容开始,直到我迷路了.

1)需要在数据库上启用Service broker,并且需要设置一些权限.

2)应该部署数据库模式.

3)使用aspnet_regsql.exe,为需要缓存数据的数据库和表启用sql缓存依赖(此步骤创建一个表来跟踪表上的更改和触发器以捕获更改并在该表中增加值).

4)在.net应用程序中设置sql缓存依赖项.例如,在Web应用程序中,您需要为轮询时间,连接字符串等添加配置值;启动/停止global.asax.cs中的依赖项,然后在向缓存中添加项目时添加sql缓存依赖项.

4a)启动依赖关系时发生的部分原因是为队列,服务和sproc设置了基础结构,以便之后进行通信和清理.使用sql Query Profiler,您可以看到正在建立的连接以及在服务上设置的通信通道,以便应用程序从sql server接收消息.

5)这是我感到困惑的地方.此时,我已经在应用程序缓存中缓存了一个项目,并引用了基础表上的sql缓存依赖项,以便我的应用程序可以在行更改时收到更改.如果我在该行上手动运行更新,我可以看到触发器被命中并且跟踪表中的值增加1.但是,我没有看到任何通信返回到应用程序,SQL查询分析器上没有任何内容,也没有是从缓存中删除的项目.我也没有在数据库的队列中看到任何内容(动态应用程序队列和标准错误/传输队列)

我的问题是,在数据库中观察跟踪表是什么,以便可以将消息发送回与此数据更改有关的sql依赖项?

非常感谢任何帮助…我一直在搜索许多在线参考,并找不到任何具体的解释.

解决方法

数据库中创建一个新表,其中包含要检查更新的表的名称以及更改编号.您为sqldependency设置的每个表都有一个为更新/插入设置的触发器,它会增加我刚刚描述的新表中的changeid.

你的心智模型是如何运作的倒退.您的应用程序检查日志以确定表是否已更改.

因此,如果更改日志表(我称之为)是跟踪数据库中的两个表(产品,用户),它将如下所示.

+Table Name + ChangeNumber +
| Product   | 1            |
+-----------+--------------+
| User      | 1            |
+-----------+--------------+

现在,如果您修改这些表中的任何一个,触发器将增加ChangeNumber,我们现在知道它们已更改.

显然还有更多,但这是一般的想法.

注意:应该注意的是,如果一个或多个表发生更改,您可以使页面无效,因此如果您的页面对这两个表都设置了相关性,如果其中一个表发生更改,它将使缓存页面无效并重新缓存更新版.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...