gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:24:18 28 4
gpt4 key购买 nike

我一直在做一些研究,我可以看到这个系统的大部分管道,但是我不确定 sql server 如何知道当表中的数据更改时何时向任何监听器(应用程序)发送消息。我将首先解释我的理解,直到我迷路为止。

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

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

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

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

4a) 启动依赖项时发生的部分事情是为队列、服务和随后的通信和清理设置了基础设施。使用 Sql Query Profiler,您可以看到正在建立的连接和正在服务上设置的通信 channel ,以便应用程序从 sql server 接收消息。

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

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

非常感谢任何帮助......我一直在浏览许多在线引用资料,但找不到任何具体的解释。

最佳答案

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

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

因此,如果更改日志表(这就是我所说的)正在跟踪数据库中的两个表(产品、用户),它将看起来像这样。

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

现在,如果您修改这两个表中的任何一个,触发器将增加 ChangeNumber我们现在知道他们改变了。

显然还有更多内容,但这是总体思路。

注意:需要注意的是,如果一个或多个表发生变化,您可以使页面失效,因此如果您的页面对这两个表都设置了依赖关系,如果其中一个发生变化,它将使缓存的页面失效并重新缓存更新的页面版本。

关于.net - 当表中的数据发生变化时,SqlCacheDependency 如何知道何时与任何监听器通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353558/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com