martes, 12 de agosto de 2008

ASP.NET - Modificar web.config sin reiniciar aplicación - II

Posts: 1, 2
Caso 2
Modificar la sección configSections sin reiniciar la aplicación
Vamos a crear una sección personalizada [configSections] en el web.config, por qué? porque es mucho más flexible y clara la definición de los items que allí se vayan agregando... por ejemplo, puedo crear una sección llamada Mascotas, y otra llamada Paises... las cuales pueden tener items de manera ordenada y agrupada, lo cual no puedo hacer en la sección AppSettings.

No voy a explicar cómo crear secciones personalizadas en el web.config, porque de eso no trata este artículo, pero si eres un tipo(a) insaciable de conocimientos y aún no sabes cómo hacerlo, dale una chequeada a este buen artículo del maestro Scott Mitchell.

1.- Entonces, lo primero que debemos hacer es crear una sección personalizada en el web.config,
Y esta es la sección personalizada que acabo de crear en el configSections jeje:

[configSections]
[section name="Mascotas" restartOnExternalChanges="false"
type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" requirePermission="false" /]
[/configSections]

[Mascotas file="Mascotas.config" /]


Les explico:
He creado una sección personalizada de nombre mascotas, la cual será de tipo System.Configuration.AppSettingsSection y que además incluye el atributo restartOnExternalChanges="false", este atributo es el que hace todo el trabajo sucio... poniéndole a false le estamos diciendo que si se hace un cambio en un archivo externo referenciado desde esta sección, en este caso el archivo Mascotas.config... que no se reinicie la aplicación... sí señores, como lo oyeron: que no se reinicie la aplicación.

Sigamos. Luego, debajo agrego la sección Mascotas [Mascotas file="Mascotas.config" /], el cual está haciendo referencia a un archivo externo en el cual guardaremos los nombres de algunas mascotas.
Mascotas.config
[Mascotas]
[add key="Pelu" value="Peluchin" /]
[add key="Bob" value="Bobby" /]
[add key="Ches" value="Chester" /]
[add key="Dal" value="Dalma" /]
[add key="Bran" value="Brandon" /]
[add key="Nero" value="Neron" /]
[/Mascotas]


Uds, pueden crear una página default.aspx y en el page_Load pongan una variable de sesión llamada session("Test"), cárguenla con cualquier valor, por ejemplo session("Test")= "xxx", luego agreguen una mascota más al archivo Mascotas.config, guarden el cambio y regresen al archivo default.aspx, verán que el valor de session("Test") aún mantiene su valor "xxx".
Más o menos así:
Imports System.Web.Configuration
Imports System.Configuration


Partial Public Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

If IsNothing(Session("Test")) Then
'todavía no se ha cargado la variable session
Session("Test") = "xxx"
End If


'De paso recuperemos los valores de la sección configSections
Dim WebConfig As Configuration = WebConfigurationManager.OpenWebConfiguration("~")
Dim Mascotas As AppSettingsSection = WebConfig.GetSection("Mascotas")
Dim MascotasCollection As KeyValueConfigurationCollection = Mascotas.Settings
Dim sb As New System.Text.StringBuilder

For Each Mascotita As KeyValueConfigurationElement In MascotasCollection
sb.Append(String.Format("key: {0} - Value: {1}[br /]", Mascotita.Key.ToString(), Mascotita.Value.ToString()))
Next
Label1.Text = sb.ToString


End Sub
End Class


Posts: 1, 2

No hay comentarios.: