2009-01-02 13 views
24

को संशोधित करने के अलावा asp.net अनुप्रयोग को पुनः आरंभ करने वहाँ आवेदन अंदर से web.config को छू के अलावा एक asp.net अनुप्रयोग बाउंस करने के लिए एक सिफारिश रास्ता नहीं है? HttpRuntime.UnloadAppDomain() है; ऐसा करने का पसंदीदा तरीका? और यदि ऐसा है तो आप यह कहां करते हैं? किसी पृष्ठ या एप्लिकेशन में किसी अन्य स्थान के अनलोड में?कैसे web.config

उत्तर

12

इस .NET 2.0 या अधिक से अधिक है, तो आप एक "App_offline.htm" फ़ाइल में जोड़ सकते हैं, सर्वर से अनुरोध करते हैं, इसे हटाने, और फिर सर्वर से एक और अनुरोध करते हैं।

घटनाओं के रूप में लंबे समय तक app_offline.htm फ़ाइल के रूप में फ़ोल्डर में मौजूद है के लिए आवेदन अनलोड करने के लिए ASP.NET के लिए बाध्य करेगा का यह क्रम।

स्कॉट गुथरी का उस पर ब्लॉग प्रविष्टि: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

+0

htis सिर्फ सिस्टम को ऑफ़लाइन लेता है। मैं इसे स्वच्छ कैश/सत्र और इसी तरह के साथ पुनरारंभ/पुनः लोड करना चाहता हूं। जब मैं app_offline.htm को हटा देता हूं तो यह डिफ़ॉल्ट रूप से इसे वापस लाएगा? – MikeJ

+0

@ माइकजे - नहीं। यह ऐप को बंद कर देता है और फ़ाइल को हटाए जाने तक सर्वर से ऐप डोमेन को अनलोड करता है। –

+3

@ माइकजे - कृपया ध्यान दें कि यह एक प्रोग्रामेटिक परिवर्तन नहीं है। –

6

आप बंद करो और आवेदन पूल रूप में अच्छी तरह ऐप्स के साथ संबद्ध शुरू कर सकते हैं।

+0

लेकिन यह आईआईएस अधिकार से है। कुछ मामलों में मुझे आईआईएस बॉक्स तक पहुंच नहीं हो सकती है, इसलिए मैं कुछ प्रोग्रामिक ढूंढ रहा हूं। – MikeJ

+1

आप डब्लूएमआई का उपयोग कर एप्लिकेशन पूल रीसायकल कर सकते हैं: http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling- अनुप्रयोग- पुल-using- WMI-in-IIS-6.0.aspx – Portman

+0

ठंडा। मुझे नहीं पता था कि – MikeJ

22

एक आवेदन के अंदर से छूना web.config IMO एक बुरा विचार है। साथ ही, आपके द्वारा संशोधित फ़ाइल रखने का विचार थोड़ा हैकनी, आईएमओ है।

प्रलेखन विशेष रूप से कहा गया है कि UnloadAppDomain एप्लिकेशन बंद हो जाएगा:

UnloadAppDomain अप्रयुक्त अनुप्रयोगों के कार्यक्रम संबंधी शटडाउन अनुमति देता है।

आपको इस कॉल को एप्लिकेशन में कहीं भी सक्षम करने में सक्षम होना चाहिए। ध्यान रहे, आप एक SecurityException मिल सकता है, तो यह सुनिश्चित करें कि क्रम उपयुक्त अनुमतियां देता है (यदि आप सबूत के साथ GAC में एक पुस्तकालय में इस डाल करने के लिए और एक फोन करना और उसके बाद पुस्तकालय की स्थापना की यह पूर्ण विश्वास देने के लिए चाहते हो सकता है बनाने के)।

+2

हां काम करने के लिए आपको फ़ाइल को भौतिक रूप से जोड़ने और निकालने की आवश्यकता होगी। यही कारण है कि मैं पूछ रहा था। web.config संशोधन बदसूरत लग रहा था और हमें thedailyWTF.com पर लिखे जाने की संभावना है :) – MikeJ

+2

मुझे लगता है कि उद्धरण के लिए एक बेहतर पंक्ति होगी: "वर्तमान एप्लिकेशन को समाप्त करता है। आवेदन अगली बार इसके लिए अनुरोध प्राप्त होता है।" उस उद्धरण में "अप्रयुक्त" भाग को पढ़ा जा सकता है "अगर कोई इसका उपयोग नहीं कर रहा है तो केवल बंद हो जाएगा", जो मामला नहीं है। –

+2

सिस्टम का उपयोग करें। Web.HttpRuntime.UnloadAppDomain() –

0

आप बंद करो और एप्लिकेशन पूल आप हमेशा यह रीसायकल कर सकते हैं शुरू करने के लिए नहीं करना चाहते हैं।

2

आप फोन करके ऐसा कर सकते हैं HttpRuntime.ShutdownAppDomain विधि (आप, यह आह्वान करने के लिए प्रतिबिंब का उपयोग करना होगा क्योंकि यह एक निजी स्थिर विधि है)

मैं कैसे का एक उदाहरण के लिए How to restart an IIS Worker Process programmatically (i.e. shutdown the current ASP.NET Domain) देखें एक 'पुनः प्रारंभ' REST API में इस विधि का उपयोग

2

आप सुरक्षित रूप से बनाने या आवेदन निर्देशिका के अंतर्गत रन टाइम पर एक फ़ोल्डर का नाम बदलकर एक वेब अनुप्रयोग को पुनः आरंभ कर सकते हैं। जाहिर है आप वेब निर्देशिका करने के लिए या इसके नीचे एक उप निर्देशिका के अधिकार आवेदन चलाने के लिए "संशोधित" सौंपा उपयोगकर्ता देने के लिए की जरूरत है।

विधि http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

में उल्लेख किया है मैं मेरे मामले में यह करने के लिए निम्नलिखित कोड का इस्तेमाल किया। इसे "लिखने योग्य" उप-निर्देशिका

protected void RestartButton_Click(object sender, EventArgs e) 
{ 
    //restart web app (instead of iisreset) 
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart")); 
    if (dir.Exists) 
    { 
     Directory.Move(dir.FullName, dir.FullName + "ed"); 
    } 
    else 
    { 
     DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted")); 
     if (dired.Exists) 
     { 
      Directory.Move(dired.FullName, dir.FullName); 
     } 
     else 
     { 
      Directory.CreateDirectory(dir.FullName); 
     } 
    } 
} 
+0

अच्छी तरह से यह मेरे लिए काम नहीं करता है। मैं निर्देशिका बनाई जा रही है लेकिन application_Start घटना पर कॉल नहीं किया गया है! – KMX

+0

कि बार्ट लैनोई लिंक मृत लगता है – brennanyoung

7

पर यह काम करने के लिए संशोधित करें यह कोड मेरे लिए काम करता है। बस इसे पुनः लोड करने के लिए कॉल करें।

System.Web.HttpRuntime.UnloadAppDomain(); 

Read more

इस विधि हमारे आवेदन उतारना होगा।यदि आप इस विधि को एएसपी.नेट वेब बटन में डालते हैं तो आप पूरी तरह से कर चुके हैं। तो हमारे आवेदन को फिर से लोड कब किया जाएगा? दरअसल यदि आप अपने बटन पर क्लिक करते हैं तो यह पहले हमारी विधि लॉन्च करेगा और एप्लिकेशन को अनलोड करेगा। वेब पेज पर आगे हम उस पल पर भी पुनः लोड हो जाएंगे, क्योंकि हमने अभी एक बटन क्लिक किया है और वेब पेज को रीफ्रेश करना चाहिए। हमारी विधि लॉन्च करने के बाद पेज रीफ्रेश प्रक्रिया हमारे एप्लिकेशन को फिर से लोड करने का कारण बन जाएगी।

+0

अच्छी तरह से काम करने लगता है, और निश्चित रूप से यहां दिया गया सबसे सरल समाधान! –