asp.net - net - obtener cadena de conexion app.config c#
Abra web.config desde la aplicaciĆ³n de consola? (3)
Tengo una aplicación de consola que se ejecuta en la misma computadora que aloja un grupo de archivos web.config. Necesito que la aplicación de la consola abra cada archivo web.config y descifre la cadena de conexión y luego pruebe si la cadena de conexión funciona.
El problema con el que me estoy enfrentando es que OpenExeConfiguration está esperando un archivo de configuración de la aplicación winforms (app.dll.config) y OpenWebConfiguration necesita ejecutarse a través de IIS. Como esta es mi máquina local, no estoy ejecutando IIS (uso el servidor integrado de Visual Studio).
¿Hay alguna manera de que pueda abrir los archivos web.config mientras obtengo la solidez de las capacidades de .NET para descifrar las conexiones?
Gracias
Actualizar OpenWebConfiguration funciona si consulta IIS directamente o si es el sitio web en cuestión al que desea buscar el web.config. Lo que quiero lograr es el mismo tipo de funcionalidad, pero desde una aplicación de consola que abre el archivo web.config de un sitio web en mi misma máquina sin usar una consulta IIS porque IIS no se está ejecutando en mi máquina.
Creo que quieres usar la clase WebConfigurationManager con su método OpenWebConfiguration .
Lleva una ruta al web.config y debe abrirlo como lo haría en una aplicación basada en HTTPContext.
Cuando la clase ConfigurationManager toma una sección del archivo de configuración, tiene una propiedad "IsProtected" que puede inferir para una sección determinada que capte. Si está protegido, puede Desprotegerlo usando algún código.
El método básico para cifrar / descifrar es el siguiente (tomado del enlace del artículo a continuación):
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();
}
}
Echa un vistazo a este artículo para conocer todos los detalles sobre cómo trabajar con esto.
Ok, lo tengo ... compilado y accedí a esto, así sé que funciona ...
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");
Esto supone que tiene un archivo llamado web.config en un directorio llamado C: / Test.
Ajusté los métodos de @ Dillie-O para tomar una configuración como parámetro.
También debe hacer referencia a System.Web y System.configuration y a cualquier dll que contenga manejadores de configuración que estén configurados en su web.config.