将对象添加到缓存后,缓存正在删除

时间:2013-08-10 17:24:23

标签: c# asp.net caching web-config

我在VS2012中开发asp.net Web表单应用程序我有一个项目使用Web.App,一个项目是一个类库。 在类库中,我从web.config读取配置(在一个项目中有许多应用程序设置,如菜单文件,日志文件等的路径......),在这个程序集中,我有一个用于缓存和记录事件到文件的类。

这是缓存类的一部分:

public static class MyCache
{
    public const String CACHE_MENU_USER = "CACHE_MENU_USER_{0}";
    public const String CACHE_LOG_FILE_PATH = "LOG_FILE_PATH";
    public static void AddToCache(String cacheKey, Object value, DateTime absoluteExpiration, bool loggToFile = true)
    {

        HttpContext.Current.Cache.Add(cacheKey,
                                      value,
                                      null,
                                      absoluteExpiration,
                                      Cache.NoSlidingExpiration,
                                      CacheItemPriority.High,
                                      (k, v, r) => //key, value, reason of remove from cache
                                      {
                                          String reasonOfRemove = String.Empty;
                                          switch (r)
                                          {
                                              case CacheItemRemovedReason.DependencyChanged:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.DependencyChanged");
                                                  break;

                                              case CacheItemRemovedReason.Expired:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Expired");
                                                  break;

                                              case CacheItemRemovedReason.Removed:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Removed");
                                                  break;

                                              case CacheItemRemovedReason.Underused:
                                                  reasonOfRemove = String.Format("CacheItemRemovedReason.Underused");
                                                  break;
                                          }

                                          AppConfiguration.Logger.WriteMessage(String.Format("Key {0} was removed for reason: {1}", cacheKey, reasonOfRemove));
                                      });

        if (loggToFile)
            AppConfiguration.Logger.WriteMessage(String.Format("Insert cache key {0} from now to: {1}", cacheKey, absoluteExpiration));
    }
}

AppConfiguration是一个静态类,其静态属性包含来自web.config的值。 Logger是Logger类的一个实例。

在global.asax中是一段代码:

protected void Application_Start(object sender, EventArgs e)
    {
        AppConfiguration.ReadConfiguration();
        AppConfiguration.Logger.WriteMessage("Start app");
    }
    protected void Application_End(object sender, EventArgs e)
    {
        AppConfiguration.Logger.WriteMessage("End app");
    }

问题是,每次请求都会调用App_Start,立即删除插入的缓存值...

这是日志文件的一部分:

10.8.2013 17:14:22:启动app。

10.8.2013 17:14:23:从现在起将缓存密钥CACHE_MENU_USER_DEMO \ Administrator插入:2013年8月17日下午5:14:23

10.8.2013 17:14:23:密钥CACHE_MENU_USER_DEMO \管理员因原因被删除:CacheItemRemovedReason.Removed

10.8.2013 17:14:23:结束应用。

每次请求都会重复此操作。

我尝试在IIS Express中启动应用程序,我尝试在服务器(IIS7,Windows server 2008 R2)中启动应用程序,它仍然是相同的......

知道缓存和global.asax有什么问题吗? 感谢

修改 * 问题解决了。更多内容来自FlopScientist *

0 个答案:

没有答案