Почему кеширование asp.net вызывает исключение?
У меня есть куча простых таблиц поиска, которые кэшируются в моем приложении 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.CacheMethods.CheckLocationsExpired(строковый ключ, значение объекта, причина CacheItemRemovedReason) в C:\Projects\HR\EAF 2.0\DAL\CacheMethods.vb: строка 434 в System.Web.Caching.CacheEntry.CallCacheItemRemallbackItem CtemRateback CaveRecoveCallbackTimeback Cave причина)
Я проверяю, что данные действительно там и актуальны, и ничто в аргументах команды не кажется неуместным, когда я прохожу через отладчик.
Кто-нибудь знает, что мне здесь не хватает? Является ли это еще одним из тех "нюансов", как проблема Reponse.Redirect, когда при техническом завершении обработки возникает исключение прерывания потока?
4 ответа
Это все еще исключение, когда вы не предоставляете ему функцию обратного вызова? Похоже, что делегированная функция имеет проблемы с нулевыми объектами.
Вы можете вместо этого использовать HttpRuntime.Cache. Возможно, что HttpContext.Current имеет значение null, если вы вызываете его из модульного теста или чего-то подобного.
Сначала я думал, что GetAllCheckLocations выбрасывает исключение или возвращает ноль.