asp.net缓存在windows azure中运行不佳

时间:2015-03-01 09:55:35

标签: asp.net

我正在建立新闻网站。我正在使用System.Web.HttpRuntime.Cache来缓存来自sql server数据库的检索到的新闻。缓存数据取决于 mytable

代码

public static List<NewsItem> RetriveTop5VideosLastMonth()
    {


        // if null then fetch from the database
        if (System.Web.HttpRuntime.Cache["topvideos"] == null)
        {
            using (SqlConnection dbConnection = getConnection())
            {

                // Create the cache dependency
                SqlCacheDependency dep = new SqlCacheDependency("mytable", "news");

                SqlDataAdapter ad = new SqlDataAdapter("RetriveTop5VideosLastMonth", dbConnection);
                ad.SelectCommand.CommandType = CommandType.StoredProcedure;
                DataSet ds = new DataSet();
                ad.Fill(ds);

                List<NewsItem> lst = new List<NewsItem>();
                foreach (DataRow item in ds.Tables[0].Rows)
                {

                    lst.Add(new NewsItem() { id = item["id"].ToInt(), link = item["link"].ToString(), title = item["title"].ToString(), category = item["category"].ToString(), description = item["description"].ToString(), entry_date = Convert.ToDateTime(item["entry_date"].ToString()), image = checkEmptyImage(item["image"].ToString()), source = item["source"].ToString(), views = item["views"].ToInt() });
                }


                // put in the cache object
                System.Web.HttpRuntime.Cache.Insert("topvideos", lst, dep);
            }
        }


        return System.Web.HttpRuntime.Cache["topvideos"] as List<NewsItem>;


    }

因此,当mytable的数据发生变化时,它应该删除缓存的数据。在windows azure我更改mytable数据但缓存数据仍然存在!哪里是我的错?

1 个答案:

答案 0 :(得分:0)

使用SqlDependency进行HttpRuntime缓存在Azure中运行良好。在创建SqlCacheDependency之前,需要使用SqlDependency.Start方法启动侦听器。有关更多详细信息,请查看示例dotnet.dzone.com/articles/c-sqldependency-monitoring

SqlDependency.Start方法启动侦听器以从连接字符串指定的SQL Server接收依赖项更改通知。如果基础数据发生了一些变化,SQL Server会检测到它们,并通过SqlDependency.Start方法创建的底层SqlConnection向客户端发布通知。

请注意,必须为每个SqlDependency.Start调用调用SqlDependency.Stop方法以释放侦听器。