问题标签 [sqldependency]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
12244 浏览

sql-server - 为什么我的 SqlDependency 没有触发

我有一个在 MS SQL Server 2005 上运行的数据库和一个 ASP.NET 3.5 Web 应用程序。

该数据库包含一个产品目录,我用它来将“页面”提供给在 Web 应用程序中运行的 CMS。创建页面后,应用程序会将它们缓存起来,因此我需要将此更改通知应用程序,以便它可以重新创建页面对象。

CMS 使用它自己的缓存,因此不能使用 SqlCacheDependency 来执行此任务。

当我启动应用程序时,我确实让订阅者出现在结果中

但是,只要我向表中添加一些数据,订阅者就会消失,并且 OnChanged 事件永远不会触发。

在我的启动代码中,我有以下内容

0 投票
2 回答
331 浏览

c# - 当前一个处理程序没有完成时,事件是否被触发?

当先前事件处理程序的调用未完成时,SqlDependency(例如)是否会触发 OnChange 事件?(假设 OnDependencyChange 方法非常耗时)到底发生了什么?

0 投票
1 回答
1795 浏览

.net - 使用 SQLDependency/SqlNotificationRequest 让同一应用程序的多个实例接收相同的通知?

我最近开始研究这个问题,但我知道 ASP.NET缓存可能会在表(或查询结果)更改时以某种方式使用SqlCacheDependency使缓存无效。这将我引向 SQLDependencySqlNotificationRequest类。虽然SqlNotificationRequest类的细节仍然让我难以理解,但我确实设法了解了一些关于SQLDependency类的知识。Start方法需要更大的权限,然后我才能给用户我的进程将连接到数据库,所以我做了一些研究并成功创建了一个队列服务代理我的测试应用程序可以用来获取通知。

我的问题是,如果我运行我的测试应用程序的多个实例,它就不起作用。我在这里和那里看到了一些提示,听起来好像我需要一个设置(队列服务代理等)每个实例才能工作,这听起来很混乱且无法维护。

任何人都可以确认是这种情况,或者甚至可以提出一些替代解决方案吗?

此外,我们正在运行 SQL Server 2005。

0 投票
1 回答
351 浏览

c# - 当通过复制更改数据时,从 SQL Server 更新 .net WCF 服务的正确做法是什么

环境:复制服务器:SQL Server 2008 R2 客户端服务器:SQL Server Express 语言:.Net 3.5 C#

复制的服务器将通过 Web 服务不断更新,并发布许多表。

客户端服务器将对复制的服务器进行下游订阅。

目标:当 SQL Express 实例提取其订阅更新时,它需要通知 WCF 服务以便将更新传递给客户端前端。

这是最适合 SQLDependency 还是使用 CLR 触发器来联系 WCF?在不使用轮询的情况下处理这种类型的流是否有好的做法?

0 投票
1 回答
1642 浏览

sql-server - 如何在 SQL Server 上调试查询通知?

我正在尝试让查询通知正常工作,但我的应用程序没有收到任何通知。如何调试查询通知?

我在这里使用代码http://www.codeproject.com/KB/database/chatter.aspx。我可以看到队列、服务和存储过程正在服务器上创建,但我的 SqlDependency 对象上的 OnChange 事件没有被触发。

我可以以某种方式跟踪通知吗?

0 投票
1 回答
1450 浏览

sql-server-2005 - EF4 和 SQLDependency 对象

我正在尝试将 EF4 与 SQLDependency 对象一起使用,但运气不佳。

我创建了自己的队列和服务,并希望我的 WPF 应用程序监视此队列的数据更改,以便我可以更新 UI(选择尝试此操作而不是不断查询数据库)。

即使在应用程序启动时我打电话;

我的 EF4 存储库实现抛出异常说明;

{“在不提供选项值的情况下使用 SqlDependency 时,必须在执行添加到 SqlDependency 实例的命令之前调用 SqlDependency.Start()。”}

首先,我是在尝试实现 EF4 无法实现的目标,还是可以采取另一种方法让我的应用程序侦听 SQL 2005 的数据更改?

0 投票
1 回答
1659 浏览

linq-to-sql - SqlDependency 和表更新不刷新 DataContext

我在项目中实现 SqlDependency 时遇到问题。

我在 WCF 服务中使用 SqlDependency。然后,WCF 服务将所有表的所有结果保存在内存缓存中,以便获得巨大的速度增益。一切似乎都运行良好,除非我正在更新表格行。如果我在表中添加或删除一行,DataContext 会刷新并且缓存会失效而不会出现问题。但是当涉及到表行更新时,什么都没有发生,缓存没有失效,当我在调试模式下查看 DataContext 的内容时,似乎没有任何变化。

这是我正在使用的代码(请注意,我正在使用 System.Runtime.Caching 对象):

我创建了一个扩展方法,所以我所要做的就是查询这样的任何表:

我的 DataContext 在 Global.asax 中打开Application_OnStart并存储在缓存中,因此我可以随时在我的 WCF 服务中使用它。以及此时我打开 SqlDependency 对象

那么,这是 SqlDependency 的限制,还是我在此过程中做错了什么/遗漏了什么?

0 投票
1 回答
498 浏览

c# - SqlDependency 没有选择性地工作?

我试图在我的 SQL Server Express 2005 中观察一些数据,如下所示:

问题是我只对“名称”列更改时的回调感兴趣。但如果“Persons”表的另一列发生更改,也会调用 OnQueryChanged,如下所示:

这是 SqlDependency 的预期行为还是我在使用中犯了错误?

0 投票
1 回答
4018 浏览

c# - SqlDependency - 如何解释 SqlNotificationEventArgs 属性?

我正在使用SqlDependency类,并且一直在尝试查找SqlNotificationEventArgs对象 的TypeSourceInfo属性的可能组合列表,但未成功。

是迄今为止我发现的最接近的。但是,我知道这并不能涵盖所有内容,因为我已经看到了 Change/Client/Error 组合。

我真的很想知道我是否以最好的方式处理所有可能的情况。也就是说,只要有可能,我想重新建立“订阅”。
例如,更改/客户端/错误是针对中断 SqlServer 和我的应用程序之间通信的网络问题造成的。重新建立通信后,我能够成功恢复。

编辑:

如果我举一些我所担心的例子,也许会有所帮助。对于以下问题,当我说“恢复”时,我的意思是在运行时重新建立订阅,即无需人工干预。

  • 可以安全地假设Type ofSubscribe意味着我无法恢复。
  • 假设Source ofData将始终具有Info of truncateinsertupdate或是否安全delete?如果不是,它总是类似的东西。我目前不区分这些情况,我只是重新建立订阅并获取更新的数据。
  • 是否可以安全地假设,除了Info of之外AlterSource ofobject意味着我的查询不再有效并且我将无法恢复。
0 投票
2 回答
1047 浏览

sql - SQL 依赖事件在 Alter Database 上触发,而不是在表更改上触发

在其他人的代码上工作,他们已经建立了 SQL 依赖事件 (SQL 2008)。不是我非常熟悉的东西,所以只是做一些阅读和一些测试。

该事件称为 CustomerServicesTable_OnChange,因此可能意味着在 customerServices 表更改时触发。但是,当通过代码更改数据库时(我们使用的是实体框架),事件不会触发。

出于好奇,我启动了 SQL Server 管理器并尝试直接对表运行查询以查看会发生什么。对表运行 UPDATE、INSERT 或 ALTER 查询不会导致事件触发。

为了检查是否启用了 SQL 依赖项,我随后对数据库运行了以下命令,这应该是启用服务的第一步:

令我惊讶的是,运行这些命令导致事件触发!

因此,看起来该依赖项对整个数据库或数据库中的表(而不是 CustomerServices)起作用。任何人都可以提出一种方法来帮助我确定问题所在吗?

编辑:我发现导致事件触发的不是 ALTER DATABASE 命令,而是 SET SINGLE_USER 导致错误的事实。虽然对我的问题没有多大帮助。

干杯,马特