客户的要求是,每当数据库中特定表格发生任何更改时,能够在屏幕上看到刷新后的数据。
我们在数据库中有一个Job表格,其内容在浏览器中以GridView形式显示。要求在Jobs表格中进行更新、删除或插入操作时刷新网格数据。
我们使用了SQL依赖和长轮询技术来实现这一点。SQL依赖将通知asp.net有关数据库中任何更改的情况,而长轮询将异步地保持gridview更新。
我们在IIS 7.0上部署了这个应用程序,并注意到不一致的行为,即GridView大部分时间都会刷新,比如说90-95%,但有时候即使DB表中的数据已经更改,刷新也不会发生。
有人遇到过这个问题吗?在IIS中需要特定的配置吗?我在几个地方读到过,IIS不适合Comet编程。上述情况发生在只有一个用户的测试环境中。非常感谢您的帮助。提前致谢。
编辑:这个问题似乎也出现在ASP.Net开发服务器中,而不仅仅是IIS。在记录消息后,我们发现SQLDependency是导致问题的原因,因为OnChange事件并没有被一致地触发。
编辑2:当我运行查询
我们在数据库中有一个Job表格,其内容在浏览器中以GridView形式显示。要求在Jobs表格中进行更新、删除或插入操作时刷新网格数据。
我们使用了SQL依赖和长轮询技术来实现这一点。SQL依赖将通知asp.net有关数据库中任何更改的情况,而长轮询将异步地保持gridview更新。
我们在IIS 7.0上部署了这个应用程序,并注意到不一致的行为,即GridView大部分时间都会刷新,比如说90-95%,但有时候即使DB表中的数据已经更改,刷新也不会发生。
有人遇到过这个问题吗?在IIS中需要特定的配置吗?我在几个地方读到过,IIS不适合Comet编程。上述情况发生在只有一个用户的测试环境中。非常感谢您的帮助。提前致谢。
编辑:这个问题似乎也出现在ASP.Net开发服务器中,而不仅仅是IIS。在记录消息后,我们发现SQLDependency是导致问题的原因,因为OnChange事件并没有被一致地触发。
编辑2:当我运行查询
select * from sys.dm_qn_subscriptions
时,我会得到几行相同的通知订阅,即重复的订阅。只有id列是不同的。这可能是原因吗?如果是,为什么会出现重复的订阅行?如何从ASP.NET中取消订阅?
SqlDependency
吗?还是长轮询被剔除了?没有这些知识,这个问题是不可能回答的。个人认为,我更倾向于使用 web-sockets 和 redis-pub/sub... 但我猜这取决于你的扩展要求是什么。 - Marc Gravell