Вопрос

У меня есть куча простых таблиц поиска, кэшированных в моем приложении 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 или что-то в этомроде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top