ASP.Net кеш не работает под IIS 6.0 - PullRequest
0 голосов
/ 15 октября 2010

У меня есть приложение ASP.Net с простым помощником кеша. Под веб-сервером VS он работает нормально. В 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);
        }
    }

1 Ответ

2 голосов
/ 15 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...