MemoryCache está vacío justo después de agregar un objeto

Tengo un problema extraño con ASP.NET MemoryCaching en una aplicación MVC 3 ASP.NET.

Cada vez que se ejecuta una acción, verifico si su LoginInfo está realmente almacenada en la Memoria (el código se ha simplificado, pero el núcleo es el siguiente):

[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");
  } 
}

The GetLoginInfo es:

 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;
        }

El SetLoginInfo es:

        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...");
            }
       }

El código es bastante sencillo, pero a veces (totalmente al azar), justo después de agregar LoginInfo a MemoryCache, esto resulta vacío, el objeto recién agregado no está presente, por lo tanto obtuve la excepción.

Estoy probando esto tanto en Cassini como en IIS 7, parece que no está relacionado con la reutilización de AppPool (habilitado en IIS 7), lo he probado con varias políticas de almacenamiento en caché, pero no puedo hacer que funcione

¿Qué me estoy perdiendo / fallando?

PS: perdóname por mi mal inglés

Respuestas a la pregunta(3)

Su respuesta a la pregunta