मैं कार्यावधि में हमारे servicehost की app.config में स्थित connectionstring में डेटाबेस का नाम बदलने और बाद में पुन: प्रारंभ एक और डेटाबेस से कनेक्ट करने के लिए कोशिश कर रहा हूँ के लिए configurationmanager कैश कैसे साफ कर सकते हैं। यह ठीक काम करता है, लेकिन केवल तभी जब एप्लिकेशन कई सेकंड के लिए बंद हो जाता है। कई सेकंड के लिए एप्लिकेशन को बंद करना ConfigManager.Connectionstrings के कैश को साफ़ करना प्रतीत होता है। समस्या यह है कि इस शट डाउन समय के कारण, मैं अपने आवेदन में एप्लिकेशन का उपयोग नहीं कर सकता। रीस्टार्ट()।मैं ConnectionStrings
इस कैशिंग व्यवहार के बारे में अजीब बात यह है कि जब भी मूल्य (दूसरी बार यह अनुरोध किया जाता है उदाहरण में) स्मृति में अद्यतन किया जाता है अद्यतन मूल्य सही ढंग से प्रदर्शित किया जाता है। लेकिन जब एप्लिकेशन को पुनरारंभ किया जाता है तो पुराना मान फिर से उभरता प्रतीत होता है।
व्यवहार को सत्यापित करने के लिए एक नया कंसोल ऐप बनाएं।
ConfigurationManager.RefreshSection("connectionStrings");
DbConnectionStringBuilder builder = new DbConnectionStringBuilder();
Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
builder.ConnectionString = appConfig.ConnectionStrings.ConnectionStrings["DomainDBConnectionString"].ConnectionString;
//print initial value
Console.WriteLine("initial " + (string)builder["Initial Catalog"]);
//change value
builder["Initial Catalog"] = "ChangedDatabaseName";
appConfig.ConnectionStrings.ConnectionStrings.Remove("DomainDBConnectionString");
appConfig.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings("DomainDBConnectionString", builder.ConnectionString));
appConfig.ConnectionStrings.SectionInformation.ForceSave = true;
appConfig.Save(ConfigurationSaveMode.Full);
ConfigurationManager.RefreshSection("connectionStrings");
Console.ReadLine();
DbConnectionStringBuilder builder2 = new DbConnectionStringBuilder();
Configuration appConfig2 = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
builder2.ConnectionString = appConfig.ConnectionStrings.ConnectionStrings["DomainDBConnectionString"].ConnectionString;
Console.WriteLine("changed " + (string)builder2["Initial Catalog"]);
Console.ReadLine();
इस व्यवहार को पुनः करने के लिए एक App.config फ़ाइल
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DomainDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=InitialDBName;Integrated Security=SSPI;" />
</connectionStrings>
</configuration>
जोड़ने तो मुख्य विधि में निम्न कोड जोड़ने के लिए, आप (F5 दबाकर) अनुप्रयोग चलाने के लिए की जरूरत है और बंद करो। बाद में solutionname.exe.config फ़ाइल संशोधित मान के साथ दिखाई देगी। आप आवेदन को दूसरी बार (solutionname.exe doubleclicking द्वारा इस समय) आप व्यवहार में अंतर नोटिस अगर आप अपने आवेदन को समाप्त करने के तुरंत बाद ऐसा करेंगे, या आप कुछ सेकंड प्रतीक्षा की है के बाद समाप्त हो जाता है।
मेरी राय में कॉन्फ़िगरेशन प्रबंधक के कारण कॉन्फ़िगरेशन को फिर से पढ़ा जाना चाहिए। रीफ्रेशसेक्शन ("कनेक्शनस्ट्रिंग्स"); लेकिन apparenatelly यह विज्ञापित के रूप में काम नहीं करता है।
मेरे टैग संपादित करने वाले व्यक्ति को आजमाएं। इसका एएसपी.Net से कोई लेना देना नहीं है। मेरा सर्विसहोस्ट एक कंसोल एप्लीकेशन है। –
पर्याप्त मेला, लेकिन यह अभी भी है।नेट - प्रश्नों को सही ढंग से टैग न करने का जोखिम यह है कि अन्य लोग इसे आपके लिए टैग करेंगे, और उन्हें यह गलत लगेगा :) – skaffman