InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
Usuarios del sistema en Windows (servicios)
Templates css para web
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
Iconlook y Ajaxinfo - Imagenes para tus aplicaciones
Aprende Ajax desde cero
Fijar el encabezado de un GridView con ASP.Net y CSS


Como modificar web.config sin reiniciar la aplicacion ASP.NET

Cualquier programador ASP.NET sabe que las aplicaciones ASP.NET centralizan su configuracion en el archivo llamado web.config. Es sin duda una de las grandes mejoras que trajo ASP.NET.

El problema es que cuando modificamos este archivo la aplicación se recompila automáticamente. Esto implica que - si existen sesiones activas -  todos los usuarios activos perderán su sesión y todas las variables almacenadas en ella ...

Esto es debido a que por defecto la Session se almacena en la memoria del propio proceso de ASP.NET. Cuando modificamos el archivo web.config estamos cambiando la configuracion del proceso por lo que se reinicia y la información de Session se pierde.

Podemos modificar este comportamiento - a través de la clave sessionState - para almacenar la session en otro proceso, un servidor dedicado o incluso en SQL Server.

Sin embargo, cuando lo que queremos es simplemente cambiar algún parametro de configuración - normalmente en appSettings - que la aplicacion se reinicie puede ser excesivo. Por eso, a partir de la version 2.0 de ASP.NET se incluye el atributo "configSource" que permite que las claves appSettings y connectionStrings lean sus valores de un archivo externo.

A través de este atributo definimos estos datos en un archivo externo sin afectar al proceso de la aplicacion.

Veamoslo con un ejemplo. En mi caso he utilizado VS2008 y C#.

Creamos un nuevo sitio Web. Lo primero que vamos a hacer es añadir un archivo Global.asax y codificar el evento Session_Start. Cuando se inicia la session grabamos la fecha del sistema en una variable -"StartDate"-, de esta forma podrémos determinar si se ha reiniciado el proceso o no (y si estamos obteniendo el resultado deseado : mantener la Session al modificar la configuracion).

 

void Session_Start(object sender, EventArgs e)

{

// Code that runs when a new session is started

Session["StartTime"] = DateTime.Now;

}

Sobre la página por defecto del sitio - Default.aspx - incluimos varios controles label, que mostrarán el valor de inicio de la session (el valor que grabamos en el Session_Start), la fecha actual del sistema y el valor de una clave de configuracion "prueba". El código se muestra a continuacion:

 

<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//.../xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>Devjoker.com</title>

</head>

<body>

<form id="form1" runat="server">

<asp:Label ID="Label1" runat="server"

Text="Hora de inicio de Session:"></asp:Label>

<asp:Label ID="lblHoraInicio" runat="server" Text=""></asp:Label>

--

<asp:Label ID="label2" runat="server"

Text="Hora de actual:"></asp:Label>

<asp:Label ID="lblAhora" runat="server"

Text=""></asp:Label>

<br /><br />

<asp:Label ID="lblAppConfig" runat="server"></asp:Label>

<br />

</form>

</body>

</html>

Y el evento Page_Load de la página:

 

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

DateTime hora =

Convert.ToDateTime ( Session["StartTime"].ToString());

lblHoraInicio.Text = hora.ToString("dd/MM/yyyy HH:mm:ss");

string value = ConfigurationManager.AppSettings["prueba"];

lblAppConfig.Text = value;

lblAhora.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

}

}

Ahora sobre el archivo de configuracion web.config añadimos valores a la clave de configuracion appSettings como se muestra a continuación.

 

<configuration>

<!--Web config-->

<appSettings >

<add key="prueba" value="Valor de prueba."/>

<add key="prueba2" value="Este es otro valor nuevo."/>

</appSettings>

</configuration>

Ejecutamos la aplicación, y podemos observar que cada vez que cambiamos el valor de la clave "prueba" del appSettings, el valor de la variable de Session "StartDate" se inicializa con la hora del sistema. Es decir, el proceso se está reiniciando y el evento Session_Start se está ejecutando.

Ahora vamos a cambiar el archivo web.config para que lea las claves de appSettings de un archivo externo. Añadimos a nuestro proyecto el archivo OutApp.config - importante:la extension del archivo debe ser .config para que el framework impida su descarga a tarvés de un navegador -. Los archivos quedan del siguiente modo:

 

<configuration>

<!-- Web config -->

<appSettings configSource="OutApp.config" />

</configuration>

Y el archivo OutApp.config - tal cual , solo la seccion appSettings:

 

<appSettings >

<add key="prueba" value="Valor de prueba."/>

<add key="prueba2" value="Este es otro valor nuevo."/>

</appSettings>

 Ahora repetimos la prueba anterior. Ejecutamos la aplicacion y cambiamos los valores de configuracion de appSettings, podemos observar que al refrescar la página, la hora de inicio de Session no varia, es decir, el proceso no se está reiniciando. Objetivo cumplido.

Las claves que permiten el uso del atributto "configSource" son appSettings y connectionStrings, pero mi recomendacion es que solo lo usemos sobre appSettins ya que si cambiamos de base de datos quizas lo mas conveniente sea "recliclar" a los usuarios.

Como añadido final, comentar este link http://weblogs.asp.net/cibrax/archive/2007/07/24/configsource-attribute-on-system-servicemodel-section.aspx que explica como utilizar está tecnica para configurar servicios de WCF.

Saludos, DJK

 


 Versión para imprimir  Foros de consulta

 
gracias!! por rgomezj
Respuesta recibida el [07/04/2009 09:54:06]
muchas gracias por la explicacion, se me hace bastante util

 
ayuda por Manuel
Respuesta recibida el [25/06/2009 05:30:39]
Como puedo modificar los valores de configuracion de appSettings o en su defecto un connectionString?

 
Duda por Tania Carbajal
Respuesta recibida el [25/06/2009 05:35:25]
Con el siguiente codigo puedo conseguir modificar el OutApp.config sin embargo si reinician las sesiones, y no se por que sucede existe alguna forma de indicarle el nombre del archivo en este caso OutApp.config a modificar?

Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

//crear una cadena de conexion
ConnectionStringSettings conn = new ConnectionStringSettings();
conn.Name = "MiConnectionString";
conn.ConnectionString = "cadenaDeConexion";
conn.ProviderName = "System.Data.SqlClient";
// Add the connectionstring
csSection.ConnectionStrings.Add(conn);
// Save the configuration file
config.Save(ConfigurationSaveMode.Full);


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Como modificar el web.config sin reiniciar la aplicacion ASP.NET
Autor: Pedro Herrarte Sánchez
Visitas: 4715 Fecha de publicación: 06/04/2009
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 106 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 802 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 756 | Comentarios: 3 | Archivo: Articulos
Visitas: 3167 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14541 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1489 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2028 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 136 26/01/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 59 10/02/2010
necesito certificado de afiliacíon a pensiones por jelo ... [Actualidad] 0 12/03/2010
Certificado de afiliacion AFP (PENSIONES) Horizonte por Sandris ... [Actualidad] 70 30/01/2010
certificado de penciones porvenir por caro ... [Actualidad] 1 12/03/2010
vendedora por caro ... [Actualidad] 2 12/03/2010
certificado de afiliacion por jeison ... [Actualidad] 0 12/03/2010
CERTIFICADO DE AFILIACION A PROTECCION por LEIDYS ... [Actualidad] 21 11/02/2010
certificado de afiliación de pensiones y cesantias por secre ... [Actualidad] 116 28/01/2010
urgente porfabor requiero el certificado que pertenesco a esta entidad en penciones para poder trabajar por wilmer ... [Access] 0 12/03/2010
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 124 12/01/2010
pensiones por 29285524 ... [Access] 2 12/03/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
01/07/2008 LinQ To SQL - Un ejemplo sencillo
24/07/2006 SQL Dinamico    forma parte de...Tutorial PL/SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
27/02/2007 ¿Permite Windows Vista reproducir peliculas descargadas o "Piratas"? SI, si lo permite
24/05/2006 Cursores Explicitos en PL/SQL    forma parte de...Tutorial PL/SQL
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
11/12/2006 Genéricos    forma parte de...Tutorial C#
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
10/07/2006 Funciones en PL/SQL    forma parte de...Tutorial PL/SQL
09/12/2008 Aprende Ajax desde cero

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]