2009-02-04 12 views
23

मेरे पास एक कंसोल कैप्लिकेशन है जो उसी कंप्यूटर पर चलता है जो web.config फ़ाइलों का एक समूह होस्ट करता है। मुझे प्रत्येक web.config फ़ाइल खोलने के लिए कंसोल एप्लिकेशन की आवश्यकता है और कनेक्शन स्ट्रिंग को डिक्रिप्ट करें और फिर जांच करें कि कनेक्शन स्ट्रिंग काम करता है या नहीं।कंसोल एप्लिकेशन से खोलें web.config?

जिस समस्या में मैं दौड़ रहा हूं वह यह है कि OpenExe कॉन्फ़िगरेशन Winforms अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल (app.dll.config) और ओपनवेब कॉन्फ़िगरेशन की अपेक्षा आईआईएस के माध्यम से चलाने की आवश्यकता है। चूंकि यह मेरी स्थानीय मशीन है, इसलिए मैं आईआईएस नहीं चला रहा हूं (मैं विजुअल स्टूडियो के अंतर्निर्मित सर्वर का उपयोग करता हूं)।

वहाँ एक रास्ता, जबकि अभी भी नेट की क्षमताओं की मजबूती ConnectionStrings डिक्रिप्ट करने के लिए हो रही है मैं web.config फ़ाइलें खोल सकते हैं है?

धन्यवाद

अद्यतन OpenWebConfiguration काम करता है अगर आप आईआईएस सीधे में जानना चाहते हैं या प्रश्न में वेबसाइट है कि आप के लिए web.config को देखने के लिए चाहते हैं। जो मैं पूरा करने के लिए देख रहा हूं वह समान कार्यक्षमता है, लेकिन एक कंसोल एप्लिकेशन से मेरी मशीन पर एक वेबसाइट की web.config फ़ाइल खोलने के लिए आईआईएस क्वेरी का उपयोग नहीं किया जा रहा है क्योंकि आईआईएस मेरी मशीन पर नहीं चल रहा है।

+0

बस एक साइडेनोट, यदि आपका कनेक्शन स्ट्रिंग एक आवेदन पूल पहचान के उपयोग के माध्यम से विश्वसनीय कनेक्शन का लाभ उठाती है तो यह विधि संभवतः काम नहीं करेगी। यदि आप विश्वसनीय कनेक्शन का उपयोग नहीं कर रहे हैं, तो आप पर शर्म की बात है! :) – willasaywhat

+1

@Abyss यदि विश्वसनीय कनेक्शन का उपयोग किया जा रहा है, तो उन्हें एन्क्रिप्ट करने का कोई बिंदु नहीं है। विश्वसनीय (यानी क्रॉस डोमेन, राजनीति, बाहरी होस्ट) का उपयोग करना हमेशा संभव नहीं है –

+0

हाय सब, कोई विश्वसनीय कनेक्शन नहीं है। क्रॉस डोमेन स्थिति। – Josh

उत्तर

38

ठीक है, मैं यह मिल गया ... संकलित और पहुँचा इस तो मैं यह काम करता है पता है ...

 VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(@"C:\test", true); 
      WebConfigurationFileMap wcfm = new WebConfigurationFileMap(); 
      wcfm.VirtualDirectories.Add("/", vdm); 


      // Get the Web application configuration object. 
      Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/"); 

      ProtectSection(config, @"connectionStrings", "DataProtectionConfigurationProvider"); 

यह आपको एक फ़ाइल नाम वाली निर्देशिका सी में web.config कहा जाता है यह सोचते है: \ टेस्ट।

मैं @ Dillie-ओ के तरीकों समायोजित एक पैरामीटर के रूप में एक विन्यास लेने के लिए।

तुम भी System.Web और System.Configuration और किसी भी विन्यास संचालकों कि आपके web.config में स्थापित कर रहे हैं जिसमें DLLs संदर्भ होना चाहिए।

+0

मीठा! मदद के लिए धन्यवाद ~ – Josh

+0

मैं केवल इसका उल्लेख करता हूं क्योंकि आप नए हैं (आपके द्वारा दिए गए बिंदुओं से) आप इसे सही करने के अलावा मेरे उत्तर को भी ऊपर उठा सकते हैं। –

+0

बिल्कुल वांछित, धन्यवाद! – Alex

3

जब ConfigurationManager वर्ग हड़पने config फ़ाइल से एक अनुभाग, यह एक "IsProtected" संपत्ति है कि यह किसी दिए गए खंड है कि आप हड़पने के लिए अनुमान लगा सकते हैं है। यदि यह संरक्षित है, तो आप कुछ कोड का उपयोग करके इसे असुरक्षित कर सकते हैं।

एन्क्रिप्ट करने के लिए बुनियादी विधि/decrypting इस (नीचे लेख के लिंक से लिया गया) प्रकार है:

private void ProtectSection(string sectionName, string provider) 
{ 
    Configuration config = 
     WebConfigurationManager. 
      OpenWebConfiguration(Request.ApplicationPath); 

    ConfigurationSection section = 
       config.GetSection(sectionName); 

    if (section != null && 
       !section.SectionInformation.IsProtected) 
    { 
     section.SectionInformation.ProtectSection(provider); 
     config.Save(); 
    } 
} 

private void UnProtectSection(string sectionName) 
{ 
    Configuration config = 
     WebConfigurationManager. 
      OpenWebConfiguration(Request.ApplicationPath); 

    ConfigurationSection section = 
       config.GetSection(sectionName); 

    if (section != null && 
      section.SectionInformation.IsProtected) 
    { 
     section.SectionInformation.UnprotectSection(); 
     config.Save(); 
    } 
} 

बाहर की जाँच करें इस के साथ काम करने पर पूर्ण विवरण के लिए this article

+0

हाय, मैं समझता हूं कि संरक्षित वर्गों के लिए परीक्षण कैसे करें, समस्या यह है कि मैं एक कंसोल एप्लिकेशन से web.config फ़ाइल खोलने की कोशिश कर रहा हूं। आपके द्वारा प्रदान किया गया उदाहरण एक वेब एप्लिकेशन को अपनी वेब.कॉन्फिग फ़ाइल खोलने से दिखाता है।आगमन में देर से – Josh

+0

+1, क्योंकि मैंने आपके उत्तर में सबमिट की गई विधियों का उपयोग किया है जैसे कि मुझे आपको एक उपरांत देना चाहिए। –

0

मुझे लगता है कि आप अपने OpenWebConfiguration विधि के साथ WebConfigurationManager वर्ग का उपयोग करना चाहते।

यह web.config करने के लिए एक रास्ता लेता है और जैसे यह एक HttpContext आधारित अनुप्रयोग में होगा इसे खोलने चाहिए।

0
public static string WebKey(string key) 
    { 

     var configFile = new System.IO.FileInfo(webconfigPath); 
     var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name); 
     var wcfm = new WebConfigurationFileMap(); 
     wcfm.VirtualDirectories.Add("/", vdm); 
     System.Configuration.Configuration config = WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/"); 
     System.Configuration.AppSettingsSection appSettingSection = (System.Configuration.AppSettingsSection)config.GetSection("appSettings"); 
     System.Configuration.KeyValueConfigurationElement kv = appSettingSection.Settings.AllKeys 
         .Where(x => x.Equals(key)) 
         .Select(x => appSettingSection.Settings[key]) 
         .FirstOrDefault(); 

     return kv != null ? kv.Value : string.Empty; 

    } 
+0

क्या आप अपने कोड के लिए कुछ विवरण जोड़ सकते हैं, इससे हमें आपके समाधान को अच्छी तरह समझने में मदद मिलेगी। – Sphinx

संबंधित मुद्दे