【发布时间】:2014-02-22 06:24:08
【问题描述】:
我在使用 SQL Server 通知时遇到问题。我正在 ASP.net 中开发一个 Web 应用程序,其中一个页面需要收到有关 SQL Server 数据库中一个表中的新条目的通知。我正在使用 SQL Server 通知服务和 Signal R 来实现此功能。我的网页似乎可以正常工作,获取有关新数据条目的更新。
刷新使用通知的页面时会出现问题。我发现数据库中单个条目的通知数量会随着刷新次数而增加。因此,如果我三次刷新页面,我会收到 3 个通知以获取一个条目。当连接的用户数量增加时,我有点担心这是否会给服务器带来负担。此外,如果在处理使用新条目更新页面的请求时出现错误,用户会收到多条具有相同文本的错误消息。我尝试调试我的代码,发现使用的 SqlDependency 对象的 on change 事件每次都会以不同的 ID 多次触发。以下是我的代码使用通知所做的简要概述 -
我使用的是 SQL Server 2012,并且为数据库设置了
enable_broker。在
global.asax中,我使用application_start和application_stop事件来启动和停止SqlDependency。在页面代码中,我在页面加载时设置了一个新的
SqlDependency对象,使用命令对象来监视表的确切数据字段。当
onchange的SqlDependency对象触发时,我使用 Signal R 集线器类通知 UI。然后我删除SqlDependency对象的OnChange处理程序,调用SqlDependency.Stop(connectionstring),将SqlDependency对象设置为空,调用SqlDependency.Start(connectionstring),最后使用命令对象再次设置SqlDependency对象进行更新数据。这整个设置为 nothing-stop-start-reset 对象是为了继续监控数据的变化。
上述步骤工作正常,但是当我刷新页面时,这些步骤会重复刷新次数。我通过更改代码和调试尝试了很多东西,但似乎没有任何解决问题的方法。现在我想知道是不是我错过了某个设置。
请帮我解决这个问题。如果需要任何其他信息,如环境、编码细节等,也请告诉我。
问候, 天美
【问题讨论】:
-
遇到同样的问题,你解决了吗?
-
我猜是调用注册sql依赖事件的问题,贴出你的代码,让我们帮忙
-
“在 global.asax 中,我使用 application_start 和 application_stop 事件来启动和停止 SqlDependency”。 - 所以每次页面刷新时,它都会创建一个新的(相同的)事件。有没有办法只在每个会话而不是每个页面加载一次?
-
能否请您提供一些给您带来问题的代码?
-
你解决过这个问题吗?你在使用连接池吗?
标签: sql sql-server-2008 notifications sqldependency