Pregunta

Tengo un montón de tablas de búsqueda simples en caché en mi aplicación asp.net desde la fuente de datos está en un servidor separado de nuestra arquitectura web principal y cambia con poca frecuencia. He estado siguiendo respuestas aquí y diversa documentación y tengo a mi función de carga inicial llamar a los siguientes:

HttpContext.Current.Cache.Insert("CheckLocations", GetAllCheckLocations(), _
                                 Nothing, DateAdd(DateInterval.Day, 1, Now()), _
                                 System.Web.Caching.Cache.NoSlidingExpiration, _
                                 CacheItemPriority.Normal, _
                                 New CacheItemRemovedCallback(AddressOf CheckLocationsExpired))

Para mi caché caducado devolución de llamada, tengo el siguiente 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 el registro, el método GetAllCheckLocations simplemente llama a un servicio web y analiza los resultados en la tabla de datos que se almacenan.

Ahora cuando vuelva a compilar la aplicación de pruebas locales, todo sigue funcionando bien, pero me parece que el siguiente mensaje de excepción en mi archivo de registro:

  

System.NullReferenceException: referencia a objeto no establecida como una instancia de un   objeto. al (clave EAF.CacheMethods.CheckLocationsExpired cadena, valor del objeto,   CacheItemRemovedReason razón) en   C: \ Projects \ HR \ EAF 2,0 \ DAL \ CacheMethods.vb: línea 434 en   System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback (CacheItemRemovedCallback   devolución de llamada, CacheItemRemovedReason razón)

verifico que los datos son de hecho allí y hasta la fecha, y nada en los argumentos de comandos parece fuera de lugar cuando me paso a través del depurador.

¿Alguien sabe lo que me falta aquí? Es este otro de esos "matices", como el tema Reponse.Redirect donde se concluye el procesamiento lanza técnicamente una excepción aborto hilo?

¿Fue útil?

Solución

¿Todavía excepción a cabo cuando no le dan una función de devolución de llamada? Se parece más a la función de delegado está teniendo problemas con objetos nulos.

Otros consejos

Es posible que desee utilizar HttpRuntime.Cache su lugar. Es posible que HttpContext.Current es nulo si está llamando desde una unidad de prueba o algo así.

Mi idea inicial es que GetAllCheckLocations está lanzando la excepción o devolver nulo.

Tal vez se llama al método con AJAXPro o algo así.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top