比如:
/new/a.aspx
/Control/b.ascx这个页都设置了缓存时间为30分钟,比如当后台添加了新数据,又想让这二个页面数据能马上更新,而不是等这二个页面到了更新时间才去自动更新这样的代码怎么写?

解决方案 »

  1.   

    貌似没有这个问题好的解决办法,前一个项目也遇到了同样的问题,用定时解决的,看了一下腾讯微博,也是通过30秒刷新一次解决的,想想也对,对于客户端来讲,服务器是被动的,只有发出request,服务器才会给个Response,页面,无论aspx,html加载到客户端之后就存在于客户机中了,通过服务器去控制这些页面是不可能的,只有客户机主动发送request。
      

  2.   

    继承CacheDependency类型而创造自己的缓存依赖系统
    SqlDataSourceDependency(SqlDataSource上启用EnableCaching并设置缓存依赖的表),只有在表数据修改时才真正读取数据库
      

  3.   

    Duration本来就是一个“最长时间”意思的。真正会不会使用缓存,就是看会不会设置缓存依赖项,使得后台数据修改时立刻清空缓存脏数据。如果这个不会,只会设置Duration,那就等于不会使用缓存。在asp.net中提供和许多缓存依赖方法。比如SqlDependency,比如VaryByCustom。举个例子:<%@ Page Language="C#" %>
    <%@ OutputCache Duration="6000" VaryByParam="*" VaryByCustom="方案1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <%= DateTime.Now.ToLongTimeString() %>
        </form>
    </body>
    </html>
    而Global.asax中写:<%@ Application Language="C#" %>
    <script RunAt="server">
        public override string GetVaryByCustomString(HttpContext context, string custom)
        {
            switch (custom)
            {
                case "方案1":
                    return ((DateTime)(context.Cache["abcd的最后修改时间"] ?? DateTime.Parse("2011/1/1"))).Ticks.ToString();
            }
            return base.GetVaryByCustomString(context, custom);
        }
    </script>这样,不需要考虑数据库是否修改,只要当你修改数据时记得去修改一下“Cache["abcd的最后修改时间"]”所记录的时间,这样就让页面立刻刷新了。你可以再创建一个aspx,只有一句代码,在page_load中写Cache["abcd的最后修改时间"] = DateTime.Now;这样当你访问一下这个aspx,就能看到原来那个aspx可以即时刷新了。测试一下!会看别人的东西没有什么价值,会自己写出测试程序才是真懂了。
      

  4.   

    在上面例子中,我演示了如何让一个输出缓存依赖于一个“Cache["abcd的最后修改时间"]”。你可以修改那个return语句,让它组合多个Cache单元。比如一个页面或者ascx依赖于“汽车频道主列表更新时间、汽车频道栏目广告更新时间”,那么就可以组合多个Cache单元。假设你需要按照当前context中的session取出用户登录信息,好在缓存依赖输出条件上组合“当前用户所在城市”,也是一样去组合到return的字符串里。如果你不知道如何设计输出缓存依赖条件,那么就好好研究 varybycustom 吧!
      

  5.   

    来学习,有时间看看sp的那个demo。