Big*_*ike 8 asp.net-mvc c#-4.0
我在MVC 3 ASP.NET应用程序中遇到了一个奇怪的ASP.NET MemoryCaching问题.
每次执行一个动作时,我都会检查它的LoginInfo是否实际存储在MemoryCache中(代码已经简化,但核心如下):
[NonAction]
protected override void OnAuthorization(AuthorizationContext filterContext) {
Boolean autorizzato = false;
LoginInfo me = CacheUtils.GetLoginData(User.Identity.Name);
if (me == null)
{
me = LoginData.UserLogin(User.Identity.Name);
CacheUtils.SetLoginInfo(User.Identity.Name, me);
}
// Test if the object is really in the memory cache
if (CacheUtils.GetLoginData(User.Identity.Name) == null) {
throw new Exception("IMPOSSIBLE");
}
}
Run Code Online (Sandbox Code Playgroud)
GetLoginInfo是:
public static LoginInfo GetLoginData(String Username)
{
LoginInfo local = null;
ObjectCache cache = MemoryCache.Default;
if (cache.Contains(Username.ToUpper()))
{
local = (LoginInfo)cache.Get(Username.ToUpper());
}
else
{
log.Warn("User " + Username + " not found in cache");
}
return local;
}
Run Code Online (Sandbox Code Playgroud)
SetLoginInfo是:
public static void SetLoginInfo (String Username, LoginInfo Info)
{
ObjectCache cache = MemoryCache.Default;
if ((Username != null) && (Info != null))
{
if (cache.Contains(Username.ToUpper()))
{
cache.Remove(Username.ToUpper());
}
cache.Add(Username.ToUpper(), Info, new CacheItemPolicy());
}
else
{
log.Error("NotFound...");
}
}
Run Code Online (Sandbox Code Playgroud)
代码非常简单,但有时(完全随机),只是在将LoginInfo添加到MemoryCache后,结果为空,刚添加的Object不存在,因此我得到了Exception.
我在Cassini和IIS 7上测试这个,它似乎与AppPool的可重用性无关(在IIS 7中启用),我已经测试了几个缓存策略,但无法使其工作
我错过了什么/失败了?
PS:原谅我的英语不好
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |