我在 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:启动应用程序。
10.8.2013 17:14:23:插入缓存键 CACHE_MENU_USER_DEMO\Administrator 从现在到:8/17/2013 5:14:23 PM
10.8.2013 17:14:23:密钥 CACHE_MENU_USER_DEMO\Administrator 被删除,原因是:CacheItemRemovedReason.Removed
10.8.2013 17:14:23:结束应用程序。
a 每次请求都会重复此操作。
我正在尝试在 IIS Express 中启动应用程序,我正在尝试在服务器(IIS7、Windows server 2008 R2)中启动应用程序,但它仍然是一样的......
知道缓存和 global.asax 有什么问题吗?谢谢
编辑: *问题解决了。更多来自 FlopScientist 的评论*