viernes, 5 de noviembre de 2010

Leer ficheros de configuración web (Web.Config)

En este post, además de aprender a leer ficheros de configuración web, también veremos las diferencias entre ConfigurationManager y WebConfigurationManager.

  • ConfigurationManager está dentro del espacio de nombres System.Configuration y dentro del ensamblado System.Configuration.dll.
  • WebConfigurationManager está dentro del espacio de nombres System.Web.Configuration y dentro del ensamblado System.Web.dll.

En principio ambas clases trabajan con ficheros de configuración (.config), ya sean de escritorio o de web, pero la principal diferencia entre ambas es:

  • ConfigurationManager es una clase de propósito general, esto es que puede leer ficheros de configuración tanto de aplicaciones de escritorio como de aplicaciones web.
  • WebConfigurationManager está especializada en ficheros de configuración de aplicaciones web.

Si nuestro acceso a los ficheros de configuración web es de sólo lectura, cualquiera de las dos clases valdría para recuperar información.

Sin embargo, si nos planteamos acceder al fichero de configuración web para escribir, deberemos usar la clase WebConfigurationManager (queda fuera del ámbito de este post como escribir ficheros de configuración de aplicaciones de escritorio).

Cuando dijimos que WebConfigurationManager está especializada en aplicaciones web nos referíamos a que ofrece métodos especializados de los que no dispone ConfigurationManager.

 

ConfigurationManager

WebConfigurationManager

AppSettings

clip_image001[62]

clip_image001[63]

ConnectionStrings

clip_image001[64]

clip_image001[65]

GetSection

clip_image001[66]

clip_image001[67]

GetWebApplicationSection

 

clip_image001[68]

OpenMappedMachineConfiguration

clip_image001[69]

clip_image001[70]

OpenMachineConfiguration

clip_image001[71]

clip_image001[72]

OpenExeConfiguration

clip_image001[73]

 

OpenMappedExeConfiguration

clip_image001[74]

 

OpenMappedWebConfiguration

 

clip_image001[75]

OpenWebConfiguration

 

clip_image001[76]

 

GetWebApplicationSection es equivalente a GetSection (gracias a nuestro amigo “Reflector” por la información.)

OpenMappedWebConfiguration y OpenWebConfiguration son los dos métodos claves que hacen diferente a WebConfigurationManager, puesto que nos permiten abrir ficheros de configuración relativos a directorios virtuales de nuestra aplicación web.

Por ejemplo, para abrir el fichero de configuración raíz de nuestra aplicación desde cualquier página, el siguiente código sería válido:

Dim configuration As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)

Pero si tenemos una carpeta “Carpeta1” y queremos abrir el fichero web.config de esa carpeta y no el de la carpeta raíz, tendríamos este otro código:

‘Si la página está en el mismo directorio que el fichero web.config que queremos abrir
Dim configuration As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration(VirtualPathUtility.RemoveTrailingSlash(VirtualPathUtility.GetDirectory(Request.Url.AbsolutePath)))

‘Si la página no está en el mismo directorio que el fichero web.config que queremos abrir o queremos no preocuparnos por ello
Dim configuration As System.Configuration.Configuration = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath & “/Carpeta1”)

De todas formas, sino queremos abrir un web.config concreto de un directorio o si no queremos abrir el web.config raíz para escribir, no tenemos por qué llamar al método OpenWebConfiguration y podemos utilizar directamente el método GetSection que además nos devuelve una sección fuertemente tipada, donde por ejemplo y si accedemos a CompilationSection tenemos una propiedad Debug (esto es que al ser tipos inflexibles las propiedades reflejan fielmente y de manera muy intuitiva todas las opciones que se tienen si editaras el fichero web.config a mano).

A continuación te dejo una declaración por cada sección tipada que nos ofrece el framework para trabajar con los ficheros web.config.

Dim appSettings As System.Collections.Specialized.NameValueCollection = WebConfigurationManager.AppSettings

Dim connectionStringSettingsCollection As ConnectionStringSettingsCollection = WebConfigurationManager.ConnectionStrings

Dim compilationSection As CompilationSection = WebConfigurationManager.GetSection("system.web/compilation")

Dim authenticationSection As AuthenticationSection = WebConfigurationManager.GetSection("system.web/authentication")

Dim authorizationSection As AuthorizationSection = WebConfigurationManager.GetSection("system.web/authorization")

Dim customErrorsSection As CustomErrorsSection = WebConfigurationManager.GetSection("system.web/customErrors")

Dim sessionStateSection As SessionStateSection = WebConfigurationManager.GetSection("system.web/sessionState")

Dim anonymousIdentificationSection As AnonymousIdentificationSection = WebConfigurationManager.GetSection("system.web/anonymousIdentification")

Dim httpHandlersSection As HttpHandlersSection = WebConfigurationManager.GetSection("system.web/httpHandlers")

Dim clientTargetSection As ClientTargetSection = WebConfigurationManager.GetSection("system.web/clientTarget")

Dim deploymentSection As DeploymentSection = WebConfigurationManager.GetSection("system.web/deployment")

Dim globalizationSection As GlobalizationSection = WebConfigurationManager.GetSection("system.web/globalization")

Dim healthMonitoringSection As HealthMonitoringSection = WebConfigurationManager.GetSection("system.web/healthMonitoring")

Dim hostingEnvironmentSection As HostingEnvironmentSection = WebConfigurationManager.GetSection("system.web/hostingEnvironment")

Dim httpCookiesSection As HttpCookiesSection = WebConfigurationManager.GetSection("system.web/httpCookies")

Dim httpModulesSection As HttpModulesSection = WebConfigurationManager.GetSection("system.web/httpModules")

Dim httpRuntimeSection As HttpRuntimeSection = WebConfigurationManager.GetSection("system.web/httpRuntime")

Dim machineKeySection As MachineKeySection = WebConfigurationManager.GetSection("system.web/machineKey")

Dim membershipSection As MembershipSection = WebConfigurationManager.GetSection("system.web/membership")

Dim outputCacheSection As OutputCacheSection = WebConfigurationManager.GetSection("system.web/caching/outputCache")

Dim outputCacheSettingsSection As OutputCacheSettingsSection = WebConfigurationManager.GetSection("system.web/caching/outputCacheSettings")

Dim processModelSection As ProcessModelSection = WebConfigurationManager.GetSection("system.web/processModel")

Dim profileSection As ProfileSection = WebConfigurationManager.GetSection("system.web/profile")

Dim roleManagerSection As RoleManagerSection = WebConfigurationManager.GetSection("system.web/roleManager")

Dim securityPolicySection As SecurityPolicySection = WebConfigurationManager.GetSection("system.web/securityPolicy")

Dim siteMapSection As SiteMapSection = WebConfigurationManager.GetSection("system.web/siteMap")

Dim sqlCacheDependencySection As SqlCacheDependencySection = WebConfigurationManager.GetSection("system.web/caching/sqlCacheDependency")

Dim traceSection As TraceSection = WebConfigurationManager.GetSection("system.web/trace")

Dim trustSection As TrustSection = WebConfigurationManager.GetSection("system.web/trust")

Dim urlMappingsSection As UrlMappingsSection = WebConfigurationManager.GetSection("system.web/urlMappings")

Dim webPartsSection As WebPartsSection = WebConfigurationManager.GetSection("system.web/webParts")

Dim xhtmlConformanceSection As XhtmlConformanceSection = WebConfigurationManager.GetSection("system.web/xhtmlConformance")

Dim pagesSection As PagesSection = WebConfigurationManager.GetSection("system.web/pages")

Por último te invito a que no dejes de leer los siguientes enlaces donde se explica el modelo de herencia de ficheros de configuración y como se implementa en IIS.

http://technet.microsoft.com/es-es/library/cc754617(WS.10).aspx
http://learn.iis.net/page.aspx/282/the-configuration-system-in-iis-7/
http://learn.iis.net/page.aspx/145/how-to-use-locking-in-iis-70-configuration/

Un saludo!

No hay comentarios:

Publicar un comentario