2011-02-24 44 views
7

मुझे पता है कि इससे पहले शायद पूछा गया है लेकिन मुझे मेरे लिए सही जवाब नहीं मिल रहा है।विंडोज़ सेवा - कॉन्फ़िगरेशन फ़ाइल

मेरे पास foobar.exe नाम की एक विंडोज सेवा है। मेरे पास एक ही फ़ोल्डर में foobar.exe.config नामक एक एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल है।

क्या कॉन्फ़िगरेशन फ़ाइल केवल स्टार्टअप पर पढ़ी जाती है?

मैं सेवा को पुनरारंभ किए बिना कॉन्फ़िगरेशन फ़ाइल में परिवर्तन करना चाहता हूं लेकिन यह एकमात्र तरीका है जिसे मैं नई सेटिंग्स पढ़ सकता हूं।

मैं क्या गलत कर रहा हूं?

क्या विंडोज़ सेवा में गतिशील कॉन्फ़िगरेशन फ़ाइल हो सकती है?

+0

क्या यह सेवा .NET में लिखी गई है? – Oded

+0

हां, यह एक .NET वेब सेवा –

उत्तर

7

.NET अनुप्रयोग स्टार्टअप पर अपनी कॉन्फ़िगरेशन फ़ाइलों को पढ़ेंगे और प्रदर्शन कारणों से उन्हें कैश करेंगे।

मैं इस के आसपास दो बुनियादी तरीके देखें:

  • आपकी सेवा में

    , कॉन्फ़िग फ़ाइल के लिए अंतिम अद्यतन दिनांक/समय पर नज़र रखें। इस अंतिम अद्यतन तिथि को नियमित रूप से जांचें और यदि आप किसी परिवर्तन का पता लगाते हैं, तो कॉन्फ़िगरेशन फ़ाइल

  • एक Windows NT सेवा एक विशेष OnCustomCommand ईवेंट का जवाब दे सकती है। आप कॉन्फ़िगरेशन को फिर से लोड करने के लिए इस तरह के एक ईवेंट हैंडलर को कार्यान्वित कर सकते हैं, और जब आप कॉन्फ़िगरेशन बदलते हैं, तो आपके कॉन्फ़िगरेशन को बदलने के लिए आपके पास एक छोटी उपयोगिता हो सकती है, जो कॉन्फ़िगरेशन बदल गई है और आपकी सेवा में "कस्टम कमांड" भेजें

+0

ठीक है, मेरी अज्ञानता को क्षमा करें। जब मेरी प्रक्रिया का पता चलता है कि कॉन्फ़िगरेशन फ़ाइल बदल गई है, तो मैं कॉन्फ़िगरेशन को "पुनः लोड" कैसे करूं? मैं अपने कोड में ConfigurationManager.AppSettings ["SettingName"] का उपयोग कर रहा हूं। –

+1

@ शौकिया: आप 'ConfigurationManager.RefreshSection ("appSettings") को कॉल कर सकते हैं, और जब आप अगली बार पहुंचते हैं तो वह अनुभाग डिस्क से पुनः लोड हो जाएगा। [कॉन्फ़िगरेशन प्रबंधक एमएसडीएन दस्तावेज़] देखें (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.refreshsection.aspx#Y102) –

2

अपने खिड़कियों सेवा मानते हुए नेट के साथ लिखा गया था:

विन्यास फ़ाइलें केवल स्टार्टअप पर पढ़ रहे हैं। यदि आप कॉन्फ़िगरेशन में मान बदलते हैं, तो उन्हें उठाए जाने के लिए आपको सेवा को पुनरारंभ करना होगा।

यदि आप गतिशील कॉन्फ़िगरेशन चाहते हैं, तो आपको फाइल सिस्टम को मतदान करना होगा - यह देखने के लिए कि कॉन्फ़िगरेशन फ़ाइल बदल गई है और परिवर्तन लागू हैं या नहीं।

2

आपको FileSystemWatcher का उपयोग करने की आवश्यकता हो सकती है। नीचे छद्म-सी # -कोड उदाहरण देखें।

private FileSystemWatcher _myWatcher; 

protected override void OnStart(string[] args) 
{ 
_myWatcher = new FileSystemWatcher(); 
_myWatcher.Path = path to config file; 
_myWatcher.Changed += new FileSystemEventHandler(myWatcherFileChanged); 
_myWatcher.NotifyFilter = NotifyFilters.LastWrite; 
_myWatcher.EnableRaisingEvents = true; 

} 

protected override void OnStop() 
{ 
    _myWatcher.EnableRaisingEvents = false; 
} 

private void myWatcherFileChanged(object sender, FileSystemEventArgs e) 
{ 
... 
} 
संबंधित मुद्दे