2010-10-15 6 views
0

У меня есть приложение ASP.Net с простым помощником кеша. Под веб-сервером VS он отлично работает. В кеше IIS 6.0 не работает - объект, был сохранен ранее, не возвращается через минуту (без исключения). Что может быть неправильным?Кэш ASP.Net не работает в IIS 6.0

public static class CacheHelper 
    { 
     public static string Share<T>(T @object, TimeSpan period) 
     { 
      var uniqueKey = Guid.NewGuid().ToString(); 
      HttpContext.Current.Cache.Add(uniqueKey, @object, null, Cache.NoAbsoluteExpiration, 
       period, CacheItemPriority.BelowNormal, null); 
      return uniqueKey; 
     } 
     public static void ShareViaCookie<T>(string key, T @object, TimeSpan period) 
     { 
      var cachedObject = GetFromCookie<T>(key); 
      if (ReferenceEquals(cachedObject, null)) 
      { 
       var uniqueKey = Share(@object, period); 
       HttpContext.Current.Response.Cookies.Set(new HttpCookie(key, uniqueKey) 
       { 
        Expires = DateTime.Now.AddYears(1) 
       }); 
      } 
      else 
      { 
       HttpContext.Current.Cache[GetKeyFromCookie(key)] = @object; 
      } 
     } 

     public static T GetShared<T>(string key) 
     { 
      string uniqueKey = HttpContext.Current.Request.QueryString[key]; 

      return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : GetFromCookie<T>(key); 
     } 

     private static T GetFromCookie<T>(string key) 
     { 
      string uniqueKey = GetKeyFromCookie(key); 

      return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : default(T); 
     } 

     private static string GetKeyFromCookie(string key) 
     { 
      return HttpContext.Current.Request.Cookies[key] 
       .IIf(it => it != null, it => it.Value, it => null); 
     } 
    } 
+0

Опубликовать фрагмент кода. Очень трудно диагностировать, не видя кода. – MonkeyWrench

+2

http://stackoverflow.com/questions/1330347/asp-net-cache-object-issues-after-migration-from-iis-5-to-iis-6 –

ответ

2

Возможно, нет ничего технически неправильно. Кэш не означает, что любой объект будет возвращен в тот момент, когда он будет сохранен.

Если ваш сайт кэширует множество элементов, а кеш недостаточно велик, он может постоянно искать объекты для удаления из кеша. В таких ситуациях иногда объект, который только что был кэширован, может быть хорошим кандидатом для удаления. Если у вас было место для 100 объектов, и в кеше было полно элементов, которые были доступны хотя бы один раз, то он никогда не может кэшировать ваш новый объект, к которому «никогда не обращался». Это действительно происходит в необычном случае.

Смежные вопросы