为什么我的asp.net缓存会抛出异常?

时间:2009-02-17 21:48:08

标签: asp.net caching content-expiration

我的asp.net应用程序中有一堆简单的查找表,因为源数据位于我们的主Web架构的单独服务器上,并且不经常更改。我一直在这里听到答案和各种文档,我有我的初始加载函数调用以下内容:

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

对于我的缓存过期回调,我有以下代码。

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

对于记录,GetAllCheckLocations方法只调用Web服务并将结果解析为存储的数据表。

现在,当我重新编译本地测试的应用程序时,一切仍然正常,但我在日志文件中发现以下异常消息:

  

System.NullReferenceException:对象引用未设置为的实例   宾语。在EAF.CacheMethods.CheckLocationsExpired(String key,Object value,   CacheItemRemovedReason reason)in   C:\ Projects \ HR \ EAF 2.0 \ DAL \ CacheMethods.vb:第434行   System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(CacheItemRemovedCallback   回调,CacheItemRemovedReason理由)

我验证数据确实存在并且是最新的,当我单步执行调试器时,命令参数中的任何内容都不合适。

有人知道我在这里缺少什么吗?这是另一个像“Reponse.Redirect”这样的“细微差别”问题,在这个问题上,终止处理技术会抛出线程中止异常吗?

4 个答案:

答案 0 :(得分:4)

您可能希望改用HttpRuntime.Cache。如果从单元测试中调用它,HttpContext.Current可能为null。

答案 1 :(得分:2)

当你不给它一个回调函数时,它是否仍然例外?似乎更像是委托函数遇到了null对象的问题。

答案 2 :(得分:0)

我最初的想法是GetAllCheckLocations抛出异常或返回null。

答案 3 :(得分:0)

也许你用AJAXPro或其他东西调用方法。