मेरे पास एक साइट है जो कुछ संसाधनों पर एक विशेष ताला रखती है। मैंने उचित समय पर इन संसाधनों पर लॉक हासिल करने और जारी करने के लिए .NET Application_Start और Application_End घटनाओं का उपयोग किया। इसके लिए ठीक से काम करने के लिए, किसी भी समय चल रहे मेरे आवेदन का केवल एक उदाहरण हो सकता है।
ऐसा करने के लिए, मैंने Disable Overlapped Recycle
संपत्ति को एप्लिकेशन पूल पर सेट किया है True
। यह संपत्ति यह सुनिश्चित करने के लिए है कि जब भी ऐप पूल को पुनर्नवीनीकरण किया जाता है, तो एक नई शुरुआत से पहले पुरानी कार्यकर्ता प्रक्रिया पूरी तरह से बंद हो जाती है। जब भी ऐप पूल को आईआईएस के माध्यम से मैन्युअल रूप से पुनर्नवीनीकरण किया जाता है, तो यह ठीक काम करता है, स्वचालित रूप से निष्क्रिय-समय समाप्त होने के परिणामस्वरूप या किसी विशेष समय / समय अंतराल के नियमों के अनुसार स्वचालित रूप से।
हालांकि, जब साइट के लिए web.config अपडेट किया जाता है, तो यह नियम लागू नहीं हो रहा है - पुराने बंद होने से पहले एक नई कार्यकर्ता प्रक्रिया शुरू हो जाती है। इससे बुरी चीजें घटित होती हैं। मेरे पास Disable Recycling for Configuration Changes
प्रॉपर्टी सेट है False
जैसा कि मैं चाहता हूं कि ऐप पूल को वेब से अपडेट होने पर पुनर्नवीनीकरण किया जाए - यह विकास के बाद अक्सर होता है।
क्या यह ऐसी चीज है जो अपेक्षित है, या यह IIS में एक बग है? सेट करने के लिए मेरा एकमात्र विकल्प इतना है कि web.config को बदलना ऐप पूल को रीसायकल नहीं करता है? मैं ऐसा नहीं करूंगा, क्योंकि मुझे पूरा यकीन है कि यह कॉन्फ़िगरेशन बदलने वाले लोगों के साथ कई सिरदर्द पैदा करेगा और फिर ऐप पूल को रीसायकल करना भूल जाएगा।
अद्यतन करें:
अधिक स्पष्ट होने के लिए, जब start
पुराने कार्यकर्ता प्रक्रिया को बंद करने से पहले नए कार्यकर्ता प्रक्रिया घटना को कॉल किया जाता है, तो पुराने कार्यकर्ता प्रक्रिया end
घटना को कभी भी कॉल नहीं किया जाता है - यह अनुक्रम से बाहर नहीं होता है, यह कभी भी नहीं होता है।