客户的要求是每当数据库中的特定表发生任何类型的更改时,都能够在屏幕上看到刷新的数据。

我们在 DB 中有一个 Job 表,其内容显示在浏览器的 GridView 中。要求是在 Jobs 表中发生任何更新、删除或插入时刷新网格数据。

我们使用 SQL 依赖和长轮询技术来实现这一点。 SQL 依赖项将通知 asp.net 数据库中的任何更改,长轮询将保持 gridview 异步更新。

我们在 IIS 7.0 中部署了它,并注意到了不一致的行为,即 gridview 大部分时间都会刷新,比如 90-95%,但有时虽然 DB 表中的数据已更改,但有时不会刷新。

有没有人遇到过这个问题? IIS 中是否需要为此进行任何特定配置?我确实在几个地方读到 IIS 不能针对 cometd 编程进行扩展。上述场景发生在只有一个用户的测试环境中。任何帮助将不胜感激。提前致谢。

编辑: 该问题似乎也发生在 ASP.Net 开发服务器中,并且与 IIS 无关。在记录消息后,我们发现 SQLDependency 是中断的原因,因为 OnChange 事件没有持续触发。

编辑 2: 当我运行查询 select * from sys.dm_qn_subscriptions 时,我得到了多行相同的通知订阅,即重复订阅。只有 id 列不同。这可能是一个原因吗?如果是,为什么我会收到重复的订阅行?如何从 ASP.NET 终止订阅?

最佳答案

我相信你的需要是在你的项目中实现 COMET-or-Reverse-AJAX ,有一个很好的例子

http://www.codeproject.com/Articles/34562/COMET-or-Reverse-AJAX-based-Grid-Control-for-ASP-N

关于c#长轮询与SQL依赖与IIS不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12160984/

10-12 12:43
查看更多