2009-02-04 18 views
23

web.config dosyaları bir demet barındıran aynı bilgisayarda çalışan bir konsol CApplication var. Her web.config dosyasını açmak ve bağlantı dizesini çözmek için konsol uygulamasına ihtiyacım var ve bağlantı dizesi çalışıyorsa sınayın.Konsol uygulamasından web.config dosyasını açın?

İçine çalıştırıyorum sorun OpenExeConfiguration bir Win uygulama yapılandırma dosyası (app.dll.config) bekliyor ve OpenWebConfiguration IIS aracılığıyla çalıştırmak gerekiyor olmasıdır. Bu benim yerel makinem olduğu için IIS'yi çalıştırmıyorum (Visual Studio'nun yerleşik sunucusunu kullanıyorum).

Web.config dosyalarını açarken, .NET'in yeteneklerini deşifre etmek için hala yeteneklerin sağlamlığını almamın bir yolu var mı?

Teşekkür

Güncelleme doğrudan IIS sorguluyorsunuz veya sizin için web.config aramak istediğiniz Söz konusu web sitesi ise OpenWebConfiguration çalışır . Ne gerçekleştirmek için arıyorum işlevselliği aynı sıralama, ama bir konsol uygulaması bir IIS sorgusunu kullanarak değil benim aynı makinede bir web sitesinin web.config dosyasını açmasını IIS benim makinede yayınlamadığından.

+0

Yalnızca bir sidenote, bağlantı dizelerinizin bir uygulama havuzu kimliği kullanılarak güvenilen bağlantılardan yararlanması durumunda, bu yöntem büyük olasılıkla çalışmayacaktır. Güvenilir bağlantı kullanmıyorsanız, uyanın! :) – willasaywhat

+1

@Abyss Güvenilir bağlantılar kullanılıyorsa, bunları şifrelemek için bir nokta yoktur. Her zaman (yani alanları arası, siyaset, dış konak) –

+0

tüm Merhaba, yok güvenilen bağlantıları Güvenilir kullanmak mümkün değildir. Çapraz etki alanı durumu. – Josh

cevap

38

Tamam ben ... derlenmiş ... anladım ve bu yüzden çalıştığını biliyorum erişti.

bir parametre olarak bir yapılandırmaya ulaştırmak için bir Dillie-O yöntemlerinin @ ayarlanmıştır.

Ayrıca System.Web ve System.configuration ve web.config dosyasında ayarlanmış yapılandırma işleyicileri içeren tüm DLL'leri de başvurmalısınız.

+0

Sweet! Yardımınız için teşekkürler ~ – Josh

+0

Sadece bundan bahsediyorum çünkü sizler yeni olduğunuzdan (sahip olduğunuz puanlara göre), doğru olanı işaretlemenin yanı sıra cevabımı da ekleyebilirsin. –

+0

Tam olarak ne gerekiyor, teşekkürler! – Alex

3

ConfigurationManager sınıfı yapılandırma dosyasından bir bölüm aldığında, yakaladığınız belirli bir bölüm için çıkacak bir "IsProtected" özelliğine sahiptir. Korunuyorsa, bazı kodları kullanarak korumayı kaldırabilirsiniz.

şifrelemek için temel yöntemi/şifre çözme (aşağıdaki makale bağlantıdan alınmıştır) şöyledir:

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(); 
    } 
} 

Kontrol dışarı bu çalışma hakkında tüm detaylar için this article.

+0

Merhaba, korumalı bölümler için test anlamak , sorun ben bir konsol uygulamasından bir web.config dosyası açmaya çalışıyorum olmasıdır. Sağladığınız örnek, kendi web.config dosyasını açan bir web uygulamasını göstermektedir. – Josh

+0

+1 geç varışta, cevabınızda gönderdiğiniz yöntemleri kullandığım için size bir destek vermem gerekiyor gibi görünüyor. –

0

WebConfigurationManager sınıfını OpenWebConfiguration yöntemiyle kullanmak istediğinizi düşünüyorum.

Bu web.config bir yol alır ve HTTPContext tabanlı bir uygulamada olduğu gibi açmalısınız. \ Testi: Bu, bir dizin olarak adlandırılan C web.config adlı bir dosya var üstleniyor

 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"); 

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

Kodlarınız için bazı açıklamalar ekleyebilir, çözümünüzü iyi anlamamıza yardımcı olur. – Sphinx

İlgili konular