当前位置: 代码迷 >> ASP.NET >> 关于CommandNotification + Sql2005 基于通知的缓存失效的有关问题
  详细解决方案

关于CommandNotification + Sql2005 基于通知的缓存失效的有关问题

热度:5402   发布时间:2013-02-25 00:00:00.0
关于CommandNotification + Sql2005 基于通知的缓存失效的问题
看了一些ASP.NET配合SQL2005的Service Broker做基于通知的缓存失效要比SQL2000基于轮询好很多的说法
特地去装了支持Service Broker的SQL2005标准版


我这页头有了这么一行
<%@ outputcache duration="86400" varybyparam="page" sqldependency="CommandNotification" %>

数据库执行了 
ALTER DATABASE <dbName> SET ENABLE_BROKER

web.config中也有这么一段
  <caching>
  <sqlCacheDependency enabled="true">
  <databases>
  <add name="test" connectionStringName="testConnectionString" />  
  </databases>
  </sqlCacheDependency>
  </caching>

然则它似乎完全没有效果?
查了查资料...示例全是用的SqlDataSource!?
我的程序大多是dataReader,少量dataTable....不能用这种缓存失效的方法了?
进一步发现那个似乎有着N多限制,诸如"列名必须写出来(不能用*),不能用top,不能用函数,包括聚合函数,不能用子查询,包括where后的子查询,不能用外连接,自连接,不能用临时表,不能用变量,不能用视图,不能垮库,而且表名之前必须加类似dbo这样的前缀"

=_=这个...到底是我用的方法不对还是..其实它根本就没轮询好用?

基于轮询的方法几乎不需要改变代码就可以实现
但是有一点不满意的地方就是...它那个间隔可能导致比如发新帖子完毕直接返回帖子列表时无法看到新帖(可能需要按F5)

请达人指点基于通知的缓存失效之使用方法=A=

PS:另外如果也请指点下如何在缓存失效后立刻生成新缓存而不要等到别人浏览网站时再生成


------解决方案--------------------------------------------------------
手动设置Cache

用法和Session一样
  相关解决方案