Pourquoi mon cache asp.net lancer une exception?
-
05-09-2019 - |
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?
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.