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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top