मुझे पता है कि यह सवाल पुराना है, लेकिन मैं अपने वास्तविक दुनिया के अनुभव के साथ संयुक्त ASP.NET \ IIS दुनिया में वर्तमान स्थिति के आधार पर एक उत्तर पोस्ट करना चाहता था।
मैंने हाल ही में अपनी कंपनी में एक परियोजना की शुरुआत की, जहाँ मैं एक केंद्रीय स्थान में हमारे web.config फ़ाइलों में सभी एप्लिकेशन और कनेक्शन सेटिंग्स को समेकित और प्रबंधित करना चाहता था। मैं एक दृष्टिकोण को आगे बढ़ाना चाहता था, जहां हमारी कॉन्फ़िगरेशन सेटिंग्स ज़ूकिपर में उस प्रोजेक्ट की परिपक्वता और स्थिरता के कारण संग्रहीत थीं। इस तथ्य का उल्लेख नहीं है कि चिड़ियाघरकीपर एक विन्यास और क्लस्टर प्रबंधन अनुप्रयोग डिज़ाइन कर रहा है।
परियोजना के लक्ष्य बहुत सरल थे;
- चिड़ियाघर के साथ संवाद करने के लिए ASP.NET प्राप्त करें
- Global.asax में, Application_Start - ZooKeeper से web.config सेटिंग खींचें।
चिड़ियाघर कीपर से बात करने के लिए ASP.NET प्राप्त करने के तकनीकी टुकड़े को पारित करने पर, मैंने जल्दी से पाया और निम्नलिखित कोड के साथ एक दीवार को मारा;
ConfigurationManager.AppSettings.Add(key_name, data_value)
उस कथन ने सबसे अधिक तार्किक अर्थ दिया जब से मैं appSettings संग्रह में नई सेटिंग्स को जोड़ना चाहता था। हालाँकि, जैसा कि मूल पोस्टर (और कई अन्य) में उल्लेख किया गया है, यह कोड कॉल रिटर्न-ओनली बताते हुए एक त्रुटि देता है।
थोड़ा शोध करने और सभी विभिन्न पागल तरीकों को देखने के बाद लोगों ने इस समस्या के आसपास काम किया, मैं बहुत निराश था। आदर्श परिदृश्य से कमतर दिखने के लिए हार मानने या बसने के बजाय, मैंने कुछ खो जाने और खो जाने का फैसला किया।
थोड़ा परीक्षण और त्रुटि के साथ, मैंने पाया कि निम्नलिखित कोड वही होगा जो मैं चाहता था;
ConfigurationManager.AppSettings.Set(key_name, data_value)
कोड की इस पंक्ति का उपयोग करते हुए, अब मैं अपने Application_Start में ZooKeeper से सभी 85 ऐपसेटिंग कुंजी लोड करने में सक्षम हूं।
वेब में परिवर्तन के बारे में सामान्य बयानों के संबंध में। IIS रीसायकल को ट्रिगर करने के लिए, मैंने पर्दे के पीछे की स्थिति की निगरानी करने के लिए निम्नलिखित ऐपपूल सेटिंग्स को संपादित किया;
appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True
सेटिंग्स के उस संयोजन के साथ, यदि यह प्रक्रिया एक ऐप्पल रीसायकल का कारण बनती है, तो एक इवेंट लॉग प्रविष्टि दर्ज की जानी चाहिए, जो यह नहीं थी।
यह मुझे निष्कर्ष निकालता है कि यह संभव है, और वास्तव में सुरक्षित है, एक केंद्रीकृत भंडारण माध्यम से एक एप्लिकेशन सेटिंग्स को लोड करने के लिए।
मुझे उल्लेख करना चाहिए कि मैं विंडोज 7 पर IIS7.5 का उपयोग कर रहा हूं। Win2012 पर IIS8 को कोड तैनात किया जाएगा। इस उत्तर परिवर्तन के बारे में कुछ भी करना चाहिए, मैं इस उत्तर को तदनुसार अपडेट करूंगा।