CacheItemRemovedCallback вызывает сбой веб-сервера - PullRequest
0 голосов
/ 20 августа 2010

Это интересный вопрос. Я занимаюсь разработкой программного обеспечения для веб-чата, и последние пару часов я пытался понять, почему это происходит. По сути, я добавляю реальный объект чата (часть, которая осуществляет связь) в коллекцию Cache, когда вы начинаете общаться. Чтобы определить, что вы закрыли окно, я установил скользящее истечение, скажем, 10-30 секунд. Я также установил обратный вызов, чтобы клиент чата знал, что ему нужно отключиться, чтобы завершить сеанс чата. По какой-то странной причине, когда я использую код для избавления от клиента чата, каким бы он ни был, он вызывает сбой всего процесса w3svc (журнал событий проверен). Я также попытался просто отправить себе электронное письмо, когда элемент был удален, что сработало. Я даже пытался поместить весь код в блок try-catch, но, похоже, это тоже игнорируется. Есть идеи? O_o

UPD : Нет, я не пытаюсь обновить объект ( в отношении этого ).

Добавление:

HttpContext.Current.Cache.Insert("ChatClient_" + targetCid + HttpContext.Current.Session.SessionID, cl, null, Cache.NoAbsoluteExpiration,
                    TimeSpan.FromSeconds(15), CacheItemPriority.Normal, new CacheItemRemovedCallback(removeMyself));

Удаление:

public static void removeMyself(string key, Object value, CacheItemRemovedReason reason) {
        var wc = (WebClient)value;
        try {
            wc.Remove();
        }
        catch { }
    }

На самом деле я использую блокировку HttpContext.Current.cache при добавлении в кеш объектов.

1 Ответ

0 голосов
/ 20 августа 2010

Можете ли вы опубликовать код обратных вызовов cache.insert и удаленный элемент?Используете ли вы какие-либо блокировки при вставке в кеш?Вы что-нибудь сделали с настройками по умолчанию для кэша ASP.net?Вы можете воспроизвести это на другом веб-сервере?Вы уверены, что срок действия кэша истекает в миллисекундах, а не в секундах ...

Является ли ваш скользящий срок действия таким?TimeSpan.FromSeconds (30)

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