Почему мое asp.net кэширование выдает исключение?
-
05-09-2019 - |
Вопрос
У меня есть куча простых таблиц поиска, кэшированных в моем приложении asp.net поскольку исходные данные находятся на отдельном сервере от нашей основной веб-архитектуры и меняются нечасто.Я следил за ответами здесь и различной документацией, и у меня есть функция начальной загрузки, вызывающая следующее:
HttpContext.Current.Cache.Insert("CheckLocations", GetAllCheckLocations(), _
Nothing, DateAdd(DateInterval.Day, 1, Now()), _
System.Web.Caching.Cache.NoSlidingExpiration, _
CacheItemPriority.Normal, _
New CacheItemRemovedCallback(AddressOf CheckLocationsExpired))
Для моего обратного вызова с истекшим сроком действия кэша у меня есть следующий код.
Public Shared Sub CheckLocationsExpired(ByVal key As String, ByVal value As Object, ByVal reason As CacheItemRemovedReason)
Dim dtCheckLocation As New ReferenceSchema.CheckLocationDataTable
dtCheckLocation = GetAllCheckLocations()
HttpContext.Current.Cache.Insert("CheckLocations", dtCheckLocation, Nothing, _
DateAdd(DateInterval.Day, 1, Now()), _
System.Web.Caching.Cache.NoSlidingExpiration, _
CacheItemPriority.Normal, _
New CacheItemRemovedCallback(AddressOf CheckLocationsExpired))
End Sub
Для справки, метод GetAllCheckLocations просто вызывает веб-службу и преобразует результаты в сохраняемую таблицу данных.
Теперь, когда я перекомпилирую приложение для локального тестирования, все по-прежнему работает нормально, но я нахожу следующее сообщение об исключении в моем файле журнала:
System.Исключение NullReferenceException:Ссылка на объект, не заданная для экземпляра объекта объект.в EAF.Методы кэша.Срок действия контрольных значений истек(строковый ключ, значение объекта, cacheitemremoved по какой-либо причине) в C:\Projects\HR\EAF 2.0\DAL\CacheMethods.vb:строка 434 в System.Web.Caching.CacheEntry.Обратный вызов cacheitemremovedcallback(CacheItemRemovedCallback обратный вызов, cacheitemremoved по какой-либо причине)
Я проверяю, что данные действительно есть и актуальны, и ничто в аргументах команды не кажется неуместным, когда я прохожу через отладчик.
Кто-нибудь знает, чего мне здесь не хватает?Это еще один из тех "нюансов", подобных ответу.Проблема с перенаправлением, при которой завершение обработки технически вызывает исключение прерывания потока?
Решение
Выдает ли он по-прежнему исключение, когда вы не предоставляете ему функцию обратного вызова?Больше похоже на то, что у делегированной функции возникают проблемы с нулевыми объектами.
Другие советы
Возможно, вы захотите использовать HttpRuntime.Кэш вместо этого.Возможно, что HttpContext.Current имеет значение null, если вы вызываете его из модульного теста или чего-то подобного.
Моя первоначальная мысль заключается в том, что GetAllCheckLocations генерирует исключение или возвращает null .
Может быть, вы вызываете Метод с помощью AJAXPro
или что-то в этомроде.