Question

J'ai un tas de simples tables de consultation mises en cache dans mon application asp.net puisque les données source est sur un serveur séparé de notre architecture Web principale et il change rarement. J'ai suivi des réponses ici et divers documents et j'ai ma fonction de charge initiale appeler les éléments suivants:

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

Pour ma cache expiré rappel, je le code suivant.

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

Pour mémoire, la méthode GetAllCheckLocations appelle simplement un service web et analyse les résultats dans le tableau de données stockées.

Maintenant, quand je recompiler l'application pour le test local, tout fonctionne toujours très bien, mais je trouve le message d'exception suivante dans mon fichier journal:

  

System.NullReferenceException: référence d'objet non définie à une instance d'un   objet. à EAF.CacheMethods.CheckLocationsExpired (String key, la valeur de l'objet,   CacheItemRemovedReason raison) dans   C: \ Projects \ HR \ EAF 2,0 \ DAL \ CacheMethods.vb: ligne 434 à   System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback (CacheItemRemovedCallback   rappel, la raison CacheItemRemovedReason)

Je vérifie que les données sont bien là et jusqu'à ce jour, et rien dans les arguments de commande semble hors de propos quand je fais un pas dans le débogueur.

Quelqu'un sait-il ce que je suis absent ici? Est-ce un autre de ces « nuances », comme la question Reponse.Redirect où terminer le traitement jette techniquement une exception abort fil?

Était-ce utile?

La solution

Est-il encore exception quand vous ne donnez pas une fonction de rappel? Ressemble plus à la fonction déléguée a des problèmes avec des objets nuls.

Autres conseils

Vous pouvez utiliser HttpRuntime.Cache au lieu. Il est possible que HttpContext.Current est nulle si vous appelez à partir d'un test unitaire ou tel.

Ma première pensée est que GetAllCheckLocations jette l'exception ou retour nulle.

Peut-être que vous appelez la méthode avec AJAXPro ou quelque chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top