Это интересный вопрос. Я занимаюсь разработкой программного обеспечения для веб-чата, и последние пару часов я пытался понять, почему это происходит. По сути, я добавляю реальный объект чата (часть, которая осуществляет связь) в коллекцию 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 при добавлении в кеш объектов.