【疑难杂症】sqlCacheDependency 不起作用
故障环境
- Windows 7 Ultimate
- SQL Server 2008 R2
- Visual Studio 2010(ASP.NET Development Server)
故障现象
- 启动 Web 应用程序,第一次打开页面时,通过 SQL Profiler 可以监视到向数据库发出的 SQL 命令。
- 第二次打开页面时,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令,此时数据从缓存中读出。
- 修改数据库对应表中的数据。
- 第三次打开页面时,数据仍是第一次打开时的数据,通过 SQL Profiler 可以监视到未向数据库发出的 SQL 命令。
原因分析
- 已执行 alter database DbName set enable_broker,并且执行 select * from sys.databases 后,看到 is_broker_enabled 值为1。
- Web.config 中已存在 <caching><sqlCacheDependency enabled="true"/></caching>。
- Global.asax.cs 中已存在 SqlDependency.Start(connectionString); 和 SqlDependency.Stop(connectionString);。
- 页面未出现异常,加断点也未见异常,在 Windows 事件日志中大量的重复信息:
“在目标队列中对消息进行排队时出现异常。错误: 15517,状态: 1。Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.”。 - 看来问题是出在数据库的“所有者”上,因为数据库是通过备份文件恢复的,而备份文件是从其他电脑上备份出来的。
解决方法
- 打开 Microsoft SQL Server Management Studio。
- 右击数据库节点,选择“属性”。
- 选择“文件”页,在所有者中设置正确的账号。
参考资源
http://stackoverflow.com/questions/7427026/sqlcachedependency-not-working
posted on 2012-10-06 18:00 CsharpStyle 阅读(721) 评论(0) 编辑 收藏 举报