لماذا هو بلدي ASP.Net التخزين المؤقت رمي استثناء؟
-
05-09-2019 - |
سؤال
لدي مجموعة من طاولات البحث البسيطة المخزئة مؤقتا في تطبيق 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 ببساطة خدمة ويب ويوزع النتائج في جدول البيانات الذي يتم تخزينه.
الآن عندما أحصل على طلب الاختبار المحلي، ما زال كل شيء يعمل بشكل جيد، لكنني أجد رسالة الاستثناء التالية في ملف السجل الخاص بي:
System.NullReferenceException: لم يتم تعيين مرجع الكائن إلى مثيل كائن. في eaf.Cachemethods.checklocationSexpired (مفتاح السلسلة، قيمة الكائن، سبب CacheItemremovedReason) في C: Projects Hr Hr Hr 2.0 Dal Cachemethods.vb: Line 434 في system.web.caching.callcacheitemremovedcallback (cacheitemrimovedcallback السبب)
أدت إلى التحقق من أن البيانات موجودة بالفعل وتحديثا، ولا شيء في وسيطات الأوامر يبدو خارج المكان عندما أذهب إلى الأخطاء.
هل يعرف أي شخص ما أفتقده هنا؟ هل هذا آخر من "الفروق الدقيقة" مثل مشكلة Reponse.redirect حيث إنهاء المعالجة التي يلقي بها تقنيا استثناء إحباط الموضوع؟
المحلول
هل لا يزال استثناء عندما لا تعطيه وظيفة رد الاتصال؟ يبدو أن الوظيفة المفوضة تواجه مشكلات مع أشياء فارغة.
نصائح أخرى
قد ترغب في استخدام httpruntime.cache. في حين أن. من الممكن أن HTTPCONTEXT.CURRENT NULL إذا كنت تتصل به من اختبار الوحدة أو من هذا القبيل.
فكرتي الأولية هي أن GetallcheckLocations رمي الاستثناء أو إرجاع NULL.
ربما تسمي هذه الطريقة AJAXPro
أو شيء ما.