Почему кеширование 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, если вы вызываете его из модульного теста или чего-то подобного.

Может быть, вы называете метод с AJAXPro или что-то.

Сначала я думал, что GetAllCheckLocations выбрасывает исключение или возвращает ноль.

Другие вопросы по тегам