आपके द्वारा पूछे जाने वाले तरीके को संभालने के कई तरीके हैं, और आपके प्रश्न के लिए कुछ अलग पहलू हैं:
पदोन्नति के लिए छोटे अपडेट संभालें
हालांकि, आप वास्तव में यहां के बाद एक सामग्री प्रबंधन प्रणाली या समान हैं जो आपको मक्खी पर सामग्री को संपादित करने की अनुमति देता है (वर्डप्रेस / ड्रुपल या एनआईटी सीएमएस, उम्राको, ऑर्चर्ड, आदि के दृष्टिकोण से), हालांकि। यदि आप उस मार्ग से नीचे नहीं गए हैं तो कुछ चीजें आप आजमा सकते हैं।
क्योंकि ASP.NET केवल वास्तव में पुनः लोड होता है यदि आप कुछ प्रकार की फ़ाइल (web.config (s), अधिकतर /bin/
और /app_code/
फ़ोल्डरों की सामग्री) को स्पर्श करते हैं - और "अन्य फ़ाइल परिवर्तन" के लिए एक विन्यास सीमा है (मूल रूप से आपके द्वारा संशोधित किए जाने के बाद एक बार। आपकी साइट के भीतर कई फाइलें एप्लिकेशन पूल को फिर से शुरू कर देंगी - NumRecompilesBeforeAppRestart
) आप कुछ ऐसा करने पर विचार कर सकते हैं जहां आप कुछ स्थिर (यानी .html
) फाइलों के लिए एक अलग फ़ोल्डर की जांच करते हैं, जिन्हें आप आवश्यकतानुसार खींचते हैं और प्रदर्शित करते हैं, या LoadControl
एक स्ट्रिंग पथ लेने वाली विधि का उपयोग करते हैं एक .ascx
उपयोगकर्ता नियंत्रण और गतिशील रूप से इसे लोड करता है - आप यह कैसे निर्धारित करते हैं कि दिखाने के लिए स्टैकऑवरफ़्लो के लिए एक अलग प्रश्न अधिक अनुकूल है - हालांकि मैं एक नामकरण सम्मेलन आधारित समाधान की सिफारिश करूंगा।
आप प्रबंधित एक्स्टेंसिबिलिटी फ्रेमवर्क (MEF - जो कि संस्करण 4 के बाद से .NET फ्रेमवर्क का पूरा हिस्सा रहा है) जैसी किसी चीज़ का उपयोग करने पर भी ध्यान दे सकते हैं, जो आपको प्लगइन आधारित वास्तुकला लिखने और अपनी /bin/
निर्देशिका के बाहर एक फ़ोल्डर निर्दिष्ट करने की अनुमति देता है। नया .DLLs - हालाँकि मैंने यह देखने की कोशिश नहीं की है कि क्या यह ऐप रीस्टार्ट इश्यू से बचेगा, या नहीं, मैंने किसी साइट पर कॉमन फ़ंक्शनलिटी जोड़ने के लिए वेब वातावरण में अच्छे प्रभाव के लिए इसका उपयोग किया है।
यदि वह अपील नहीं करता है, तो केवल एक अन्य विकल्प जिसके बारे में मैं सोच सकता हूं, वह है "कोड-इन-फ्रंट" के रूप में नियंत्रण जोड़ना जैसा कि हमने क्लासिक एएसपी में किया था - अर्थात <script runat="server">
एक संकलित "कोड-पीछे" वर्ग के बजाय एक ब्लॉक के साथ इसमें नियंत्रण को चलाने के लिए तर्क शामिल हैं - यह DLL परिवर्तन की आवश्यकता को हटा देगा, कुछ पहली बार प्रदर्शन हानि की कीमत पर क्योंकि नियंत्रण मक्खी पर संकलित किया गया है - फिर आपको NumRecompilesBeforeAppRestart
यदि आप के साथ इसे संतुलित करने की आवश्यकता होगी 'बहुत कम बदलाव कर रहे हैं।
मैं ऐप रीस्टार्ट में सत्र कैसे जारी रख सकता हूं?
यह संभवतः हल करने के लिए एक आसान मुद्दा है और इसमें तीन प्रमुख चरण शामिल हैं:
- MachineKey (IIS7, लेकिन अभी भी 8 के लिए कॉन्फ़िगर करें) के बजाय एक स्थिर मान होना चाहिए
AutoGenerate
- इसका मतलब है कि जब AppPool रीसायकल करता है तो यह उसी कुंजी का उपयोग करेगा, और इसलिए सत्र कुकीज़, व्यूस्टेट आदि को डिक्रिप्ट करने में सक्षम होगा। रीसायकल।
- या तो एक स्टेट सर्वर सेटअप करें या एक सेशन स्टेट रखने के लिए डेटाबेस को कॉन्फ़िगर करें ।
- अपने web.config में SessionState तत्व के उपयोग
InProc
से StateServer
या SQLServer
में स्विच करें।
इस तरह आपके पास लगातार सत्र होंगे जो ऐप रीस्टार्ट से बचे रहेंगे। हालाँकि, ये "निशुल्क" नहीं हैं - सत्र में आपके द्वारा संग्रहित सब कुछ अब धारावाहिक होना चाहिए, और आप एक मामूली प्रदर्शन को प्रभावित करेंगे क्योंकि प्रत्येक पृष्ठ लोड को अब अतिरिक्त नेटवर्क ट्रिप प्राप्त करने की आवश्यकता होगी, और संभावित रूप से सत्र डेटा जारी करना होगा।
हालाँकि, यदि आप ऐसी स्थिति में हैं जहाँ पर परिनियोजन के बाद पुनः आरंभ करने के लिए एप्लिकेशन के लिए "कई मिनट" लगते हैं, तो आप लोड-संतुलित वातावरण में जाने पर विचार कर सकते हैं, या कम से कम हॉट-स्वैपेबल स्टेजिंग / लाइव सेटअप (जैसे कि Azure / AWS / etc द्वारा प्रदान किया गया।) - इस तरह आप इसे अपडेट करते समय एक सर्वर ऑफ़लाइन ले सकते हैं या इसे नए कोड के साथ तैयार कर सकते हैं और फिर इसे स्वैप कर सकते हैं - बशर्ते आपने साझा किए गए पते पर कदम उठाए हों सत्र (ऊपर देखें) यह आपके उपयोगकर्ताओं के लिए कोई प्रभाव नहीं के साथ ठीक काम करेगा।