2009-02-17 50 views
3

我有一堆簡單的查找表緩存在我的asp.net應用程序中,因爲源數據位於我們主Web體系結構的單獨服務器上,並且它很少發生變化。我一直在這裏和各種文檔以下答案,我有我的初始加載函數調用如下爲什麼我的asp.net緩存拋出異常?

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鍵,對象的值, CacheItemRemovedReason原因):\項目\ HR \ EAF 2.0 \ DAL \ CacheMethods.vb:線434在 System.Web.Caching.CacheEntry.CallCacheItemRemovedCallback(CacheItemRemovedCallback 回調,CacheItemRemovedReason原因)

我驗證數據是確實有和最新的,並沒有在命令行參數顯得格格不入,當我通過調試步驟。

有人知道我在這裏失蹤了嗎?這是否是Reponse.Redirect問題中的另一個「細微差別」問題,其中技術上終止處理引發線程異常終止異常?

回答

2

當你不給它一個回調函數時,它還是例外嗎?看起來更像是委託函數與空對象有關的問題。

+0

我應該從初始加載還是緩存過期方法中刪除回調函數? – 2009-02-17 22:42:24

+0

嘿!這看起來有希望!我沒有看到任何錯誤,我將嘗試使用一些其他緩存項目,這些項目有類似的問題,並查看數據是否仍然存在。 – 2009-02-18 00:01:56

0

我最初的想法是,GetAllCheckLocations拋出異常或返回null。

+0

GetAllCheckLocations正在返回數據,但我會嘗試直接在緩存中使用它。可能有一些安全性(因爲我們使用模擬)可能會導致這種情況。 – 2009-02-17 22:41:34

4

您可能需要改用HttpRuntime.Cache。如果你是從一個單元測試或者類似的東西調用它,那麼HttpContext.Current可能是null。

0

也許你打電話給方法AJAXPro什麼的。

相關問題