IIS 7.5 - Web.config अपडेट होने पर ओवरलेप की गई रीसायकल संपत्ति का पालन नहीं किया जा रहा है


25

मेरे पास एक साइट है जो कुछ संसाधनों पर एक विशेष ताला रखती है। मैंने उचित समय पर इन संसाधनों पर लॉक हासिल करने और जारी करने के लिए .NET Application_Start और Application_End घटनाओं का उपयोग किया। इसके लिए ठीक से काम करने के लिए, किसी भी समय चल रहे मेरे आवेदन का केवल एक उदाहरण हो सकता है।

ऐसा करने के लिए, मैंने Disable Overlapped Recycleसंपत्ति को एप्लिकेशन पूल पर सेट किया है True। यह संपत्ति यह सुनिश्चित करने के लिए है कि जब भी ऐप पूल को पुनर्नवीनीकरण किया जाता है, तो एक नई शुरुआत से पहले पुरानी कार्यकर्ता प्रक्रिया पूरी तरह से बंद हो जाती है। जब भी ऐप पूल को आईआईएस के माध्यम से मैन्युअल रूप से पुनर्नवीनीकरण किया जाता है, तो यह ठीक काम करता है, स्वचालित रूप से निष्क्रिय-समय समाप्त होने के परिणामस्वरूप या किसी विशेष समय / समय अंतराल के नियमों के अनुसार स्वचालित रूप से।

हालांकि, जब साइट के लिए web.config अपडेट किया जाता है, तो यह नियम लागू नहीं हो रहा है - पुराने बंद होने से पहले एक नई कार्यकर्ता प्रक्रिया शुरू हो जाती है। इससे बुरी चीजें घटित होती हैं। मेरे पास Disable Recycling for Configuration Changesप्रॉपर्टी सेट है Falseजैसा कि मैं चाहता हूं कि ऐप पूल को वेब से अपडेट होने पर पुनर्नवीनीकरण किया जाए - यह विकास के बाद अक्सर होता है।

क्या यह ऐसी चीज है जो अपेक्षित है, या यह IIS में एक बग है? सेट करने के लिए मेरा एकमात्र विकल्प इतना है कि web.config को बदलना ऐप पूल को रीसायकल नहीं करता है? मैं ऐसा नहीं करूंगा, क्योंकि मुझे पूरा यकीन है कि यह कॉन्फ़िगरेशन बदलने वाले लोगों के साथ कई सिरदर्द पैदा करेगा और फिर ऐप पूल को रीसायकल करना भूल जाएगा।

अद्यतन करें:

अधिक स्पष्ट होने के लिए, जब startपुराने कार्यकर्ता प्रक्रिया को बंद करने से पहले नए कार्यकर्ता प्रक्रिया घटना को कॉल किया जाता है, तो पुराने कार्यकर्ता प्रक्रिया endघटना को कभी भी कॉल नहीं किया जाता है - यह अनुक्रम से बाहर नहीं होता है, यह कभी भी नहीं होता है।


नई कार्यकर्ता प्रक्रिया शुरू होने से पहले web.config को कितनी देर बाद अपडेट किया जाता है?
ग्रेग आस्क्यू

जैसे ही मैं रीसायकल के बाद साइट को एक्सेस करने की कोशिश करता हूं, नई वर्कर प्रक्रिया शुरू हो जाती है - अगर मैं जल्दी होता हूं तो एक सेकंड से भी कम समय। यदि छोड़ दिया जाता है, तो पुरानी कार्यकर्ता प्रक्रिया 'शटडाउन' घटना रीसायकल के 20-30 सेकंड बाद होती है।
जॉन

मेरे साथ भी वही दिक्कत है। ओवरलैप है
एंड्रयू रिममर

11
Web.config फ़ाइल को संपादित करने से appDomain पुनः लोड होता है। AppDomain AppPool से अलग है। आपको केवल web.config को बदलने से एक नई W3WP प्रक्रिया आईडी नहीं देखनी चाहिए। यहाँ देखें treeloop.com/blog/iis-application-domain-and-pool-recycling
kheld

1
@kheld बिलकुल सही है (शायद इसे उत्तर के रूप में जोड़ें) यह एक अप्पुल ओवरलैप नहीं है, यह एक एपडोमैन ओवरलैप है। मुझे विश्वास नहीं है कि आप इसे रोक सकते हैं, लेकिन आप परिवर्तन पर ऐप डोमेन रीसाइक्लिंग को अक्षम कर सकते हैं।
सैम कोगन

जवाबों:


1

इस MSDN पोस्ट से: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

तो आपकी कोड परिनियोजन प्रक्रिया के भाग के रूप में, ऐसा लगता है कि जब आप इनमें से कोई भी एक परिवर्तन करते हैं, तो आपका पूल रीसायकल करेगा:

तत्काल रीसायकल

  • Web.config बदलता है
  • मशीन। परिवर्तन
  • Global.asax में परिवर्तन होता है
  • बिन डायरेक्टरी बदल जाती है
  • App_Code परिवर्तन

(इससे उधार: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.