मैं HachepContext.Current.Cache का उपयोग कर CacheItemUpdateCallback के साथ महंगा डेटा क्वेरी कैश करने के लिए कर रहा हूं।कैशिंग समाप्ति अपेक्षित के रूप में काम नहीं कर रही
विचार यह है कि उपयोगकर्ता को एक बार डेटा लोड करना होता है और फिर अपडेटकॉलबैक ऑब्जेक्ट को हर 30 मिनट में अद्यतन रखता है।
HttpContext.Current.Cache.Insert(cacheID, cachedObject, null,
expiryTimeStamp,
Cache.NoSlidingExpiration,
updateCallBack);
परीक्षण कारणों से मैं इस तरह की समाप्ति तिथि (हर 20 सेकंड अद्यतन) सेट:
var expiryTimeStamp = DateTime.Now.Add(new TimeSpan(0, 0, 20));
यह सब ठीक काम करता है
यह मैं कैसे सम्मिलित/कैश के ऊपर लिख है । इसका मतलब है, यह हर 20 सेकंड में महंगी वस्तु को अपडेट कर रहा है - लेकिन केवल 25 मिनट के लिए। फिर ट्रिगर 'अपडेटकॉलबैक' अब और नहीं कहा जाता है!
मुझे लगता है कि समस्या यह है कि आईआईएस कैश का निपटान करता है ताकि कॉलबैक 'कैशइटेम अपडेट कैलकबैक' अब और नहीं निकाला जा सके ... लेकिन यह केवल एक अनुमान है।
जो मुझे मेरे सवाल की ओर जाता है:
वहाँ किसी भी सेटिंग मैं app.config में या IIS में स्थापित करने के लिए है? या मैं गलत क्या कर रहा हूँ?
संपादित करें: इसके अलावा, मुझे समझ नहीं आता क्यों CacheItemUpdateCallback साथ Insert overload एक पैरामीटर CacheItemPriority जरूरत नहीं है। हालांकि, overload with CacheItemRemovedCallback में प्राथमिकता पैरामीटर है। शायद, अगर मैं कैशइटेम प्राथमिकता को 'उच्च' पर सेट कर सकता हूं तो यह पहले से ही मेरे मुद्दे को हल करेगा।
संपादित करें: मुझे यह समस्या मिली: प्रत्येक एप्लिकेशन पूल के लिए एक निष्क्रिय टाइमआउट संपत्ति है जो 20 मिनट तक सेट की गई थी।
क्या आपके पास अपडेट का कोड है? जिस तरह से आप इसे लागू करते हैं, इस पर इसका असर हो सकता है कि यह सब कैसे काम करता है। उदाहरण के लिए, "यदि कॉलबैक विधि अपवाद फेंकता है, तो एएसपी.नेट अपवाद को दबाता है और कैश किए गए मान को हटा देता है" ... शायद आप किसी कारण के लिए 25 मिनट के बाद अपवाद फेंक दें –
हो सकता है कि आपके ऐप-डोमेन को आईआईएस द्वारा किसी भी के लिए पुनर्नवीनीकरण किया जा सके कारण (http://stackoverflow.com/questions/302110/what-causes-an-plication-pool-in-iis-to-recycle) और इस प्रकार एक खाली कैश के साथ शुरू होता है। – jlvaquero