Por que meu cache asp.net lançar uma exceção?
-
05-09-2019 - |
Pergunta
Eu tenho um monte de tabelas de pesquisa simples em cache no meu aplicativo asp.net desde a fonte de dados está em um servidor separado da nossa arquitetura web principal e muda frequentemente. Eu tenho acompanhado respostas aqui e vários documentos e eu tenho a minha primeira chamada de função de carga o seguinte:
HttpContext.Current.Cache.Insert("CheckLocations", GetAllCheckLocations(), _
Nothing, DateAdd(DateInterval.Day, 1, Now()), _
System.Web.Caching.Cache.NoSlidingExpiration, _
CacheItemPriority.Normal, _
New CacheItemRemovedCallback(AddressOf CheckLocationsExpired))
Para o cache expirou callback, eu tenho o seguinte código.
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
Para o registro, o método GetAllCheckLocations simplesmente chama um serviço web e analisa os resultados na tabela de dados sendo armazenados.
Agora, quando eu recompilar o aplicativo para testes local, tudo ainda funciona bem, mas eu encontrar a seguinte mensagem de exceção no meu arquivo de log:
System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto. em EAF.CacheMethods.CheckLocationsExpired (chave String, Object valor, razão CacheItemRemovedReason) em C: \ Projects \ RH \ EAF 2,0 \ CHA \ CacheMethods.vb: linha 434 em System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback (CacheItemRemovedCallback callback, razão CacheItemRemovedReason)
Eu verificar se os dados é de fato lá e até à data, e nada nos argumentos de comando parece fora do lugar quando eu passo através do depurador.
Alguém sabe o que eu sinto falta aqui? É este mais um daqueles "nuances", como a questão Reponse.Redirect onde encerra o processamento tecnicamente lança um fio abort exceção?
Solução
Será que ele ainda exceção quando você não dar-lhe uma função de retorno? Parece mais a função de delegado está tendo problemas com objetos nulos.
Outras dicas
Você pode querer usar HttpRuntime.Cache em seu lugar. É possível que HttpContext.Current é nulo se você está chamando-o de um teste de unidade ou tal.
Meu pensamento inicial é que GetAllCheckLocations é lançar a exceção ou retornar null.
Talvez você chamar o método com AJAXPro
ou algo assim.