Modifica della configurazione in un esempio di file esterno
Aggiornamento: novembre 2007
È possibile utilizzare un file di configurazione esterno per estendere le impostazioni di configurazione di un'applicazione e per controllare se le informazioni di stato vengono mantenute quando tali impostazioni vengono modificate, attivando o disattivando la funzionalità di riavvio dell'applicazione. Questa funzionalità è controllata dall'attributo restartOnExternalChanges, che viene applicato a diverse sezioni del file di configurazione.
File di un'applicazione Web di esempio
Nelle sezioni riportate di seguito è incluso il codice per la generazione di un'applicazione Web di esempio con una sezione personalizzata il cui attributo configSource fa riferimento a un file di configurazione esterno e il cui attributo restartOnExternalChanges è inizialmente impostato su true.
L'esecuzione dell'applicazione Web illustra quanto accade in un contatore di postback globale quando vengono apportate modifiche al file di configurazione esterno e l'esempio di codice fornito illustra quanto accade quando restartOnExternalChanges viene impostato rispettivamente su true, sul valore predefinito e su false.
Global.asax
L'applicazione Web di esempio deve includere la pagina Global.asax. Nell'esempio di codice riportato di seguito viene definita la pagina con un contatore di postback globale. Il contatore tiene traccia delle richieste di postback generate aggiornando la pagina Default.aspx dell'applicazione, definita più avanti in questo argomento.
' Code that runs on application startup.
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' This counter is set to 0 the first time
' the application starts and, thereafter, every
' time it restarts.
Dim postBackCount As Integer = 0
Dim appState As HttpApplicationState = Application.Contents
appState.Add("postBackKey", postBackCount)
End Sub 'Application_Start
// Code that runs on application startup.
void Application_Start(object sender, EventArgs e)
{
// This counter is set to 0 the first time
// the application starts and, thereafter, every
// time it restarts.
int postBackCount = 0;
HttpApplicationState appState = Application.Contents;
appState.Add("postBackKey", postBackCount);
}
Default.aspx
Nella pagina Default.aspx è contenuto il codice che crea la sezione personalizzata nel file Web.config, viene aggiunto un elemento al file External.config e viene visualizzato il valore del contatore di postback. Si noti che nella pagina deve essere incluso un controllo Label per visualizzare il valore corrente del contatore di postback. Nell'esempio di codice riportato di seguito viene illustrato un possibile modo per definire questo controllo.
<asp:Label ID="ResultId" style="font-weight:bold; color:Red;"/>
Nell'esempio di codice riportato di seguito viene definita la pagina Default.aspx.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Dim extConfig As ExternalConfiguration = Nothing
If Not IsPostBack Then
' Create an instance of the custom section.
extConfig = New ExternalConfiguration()
End If
Dim postBackCount As Integer = _
Fix(HttpContext.Current.Application("postBackKey"))
'Display current counter value.
ResultId.Text = postBackCount.ToString()
HttpContext.Current.Application("postBackKey") = _
Fix(HttpContext.Current.Application("postBackKey")) + 1
extConfig.UpdateAppSettngs()
End Sub 'Page_Load
protected void Page_Load(object sender, EventArgs e)
{
ExternalConfiguration extConfig = null;
if (!IsPostBack)
{
// Create an instance of the cusom section.
extConfig =
new ExternalConfiguration();
}
int postBackCount =
(int) HttpContext.Current.Application["postBackKey"];
ResultId.Text = postBackCount.ToString();
HttpContext.Current.Application["postBackKey"] =
(int)HttpContext.Current.Application["postBackKey"] + 1;
extConfig.UpdateAppSettngs();
}
Web.config
Il file Web.config definisce la sezione personalizzata MyAppSettings, come illustrato nell'esempio di codice riportato di seguito. Nell'esempio viene utilizzato il tipo standard per l'elaborazione della sezione, ma è possibile crearne uno personalizzato. Per informazioni dettagliate, vedere ConfigurationElement e ConfigurationSection.
<section
name="MyAppSettings"
type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
restartOnExternalChanges="true"
requirePermission="false" />
External.config
Il file External.config contiene i dettagli della sezione personalizzata MyAppSettings. Prima di eseguire l'applicazione per la prima volta, è necessario creare manualmente questo file nella directory principale dell'applicazione. Per ulteriori informazioni, vedere l'attributo configSource in Attributi generali ereditati da elementi di sezioni. Ai fini di questo esempio, assicurarsi che il codice contenga la sezione vuota riportata di seguito.
<MyAppSettings></ MyAppSettings>.
ExternalConfiguration.dll
Il file ExternalConfiguration.dll contiene il codice che esegue l'aggiornamento della sezione personalizzata MyAppSettings. È possibile inserire il codice sorgente nella directory App_Code dell'applicazione. Quando viene richiesta l'applicazione, l'esempio verrà compilato da ASP.NET. È anche possibile compilare il provider di esempio come libreria e inserirlo nella directory Bin dell'applicazione Web. Nell'esempio di codice riportato di seguito viene illustrato come compilare l'esempio dalla riga di comando.
vbc /out: ExternalConfiguration.dll /t:library ExternalConfiguration.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out: ExternalConfiguration.dll /t:library ExternalConfiguration.cs /r:System.Web.dll /r:System.Configuration.dll
Nell'esempio di codice riportato di seguito viene generato il file ExternalConfiguration .dll.
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Configuration
Imports System.Web.Configuration
Namespace Samples.AspNet
Public Class ExternalConfiguration
' Instantiate the ExternalConfiguration type.
Public Sub New()
' Access the root Web.config file.
Dim config As System.Configuration.Configuration = _
WebConfigurationManager.OpenWebConfiguration("/configTarget")
' Get the custom MyAppSettings section.
Dim appSettings As AppSettingsSection = _
CType(config.GetSection("MyAppSettings"), AppSettingsSection)
' Perform the first update.
UpdateAppSettings()
End Sub 'New
' Update the custom MyAppSettings section.
' Note , if the section restartOnExternalChanges attribute
' is set to true, every update of the external
' configuration file will cause the application
' to restart.
Public Sub UpdateAppSettings()
Dim config As System.Configuration.Configuration = _
WebConfigurationManager.OpenWebConfiguration("/configTarget")
Dim appSettings As AppSettingsSection = _
CType(config.GetSection("MyAppSettings"), AppSettingsSection)
Dim count As Integer = appSettings.Settings.Count
appSettings.Settings.Add("key_" + count.ToString(), _
"value_" + count.ToString())
config.Save()
End Sub 'UpdateAppSettngs
End Class 'ExternalConfiguration
End Namespace
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Web.Configuration;
namespace Samples.AspNet
{
public class ExternalConfiguration
{
// Instantiate the ExternalConfiguration type.
public ExternalConfiguration()
{
// Access the root Web.config file.
System.Configuration.Configuration config =
WebConfigurationManager.OpenWebConfiguration(
"/configTarget");
// Get the custom MyAppSettings section.
AppSettingsSection appSettings =
(AppSettingsSection)config.GetSection("MyAppSettings");
// Perform the first update.
UpdateAppSettings();
}
// Update the custom MyAppSettings section.
// Note , if the section restartOnExternalChanges attribute
// is set to true, every update of the external
// configuration file will cause the application
// to restart.
public void UpdateAppSettings()
{
System.Configuration.Configuration config =
WebConfigurationManager.OpenWebConfiguration(
"/configTarget");
AppSettingsSection appSettings =
(AppSettingsSection)config.GetSection("MyAppSettings");
int count = appSettings.Settings.Count;
appSettings.Settings.Add(
"key_" + count.ToString(),
"value_" + count.ToString());
config.Save();
}
}
}
Utilizzo dell'applicazione Web di esempio
La prima volta che l'applicazione viene eseguita, verranno aggiunti elementi al file External.config.
Ogni volta che la pagina Default.aspx viene aggiornata, il contatore di postback verrà azzerato. Questa situazione si verifica in quanto l'attributo restartOnExternalChanges nella sezione MyAppSettings viene impostato su true per impostazione predefinita.
Se nel file Web.config l'attributo restartOnExternalChanges viene impostato su false, si noterà che il contatore di postback continua a registrare incrementi quando si aggiorna la pagina, nonostante le modifiche apportate nel file External.config. Questa situazione si verifica in quanto è stato disattivato il riavvio del dominio applicazione.
Vedere anche
Attività
Procedura: creare sezioni di configurazione personalizzate tramite ConfigurationSection
Concetti
Gestione delle modifiche alle impostazioni di configurazione
Protezione della configurazione di ASP.NET
Riferimenti
Attributi generali ereditati da elementi di sezioni
Elemento appSettings (schema delle impostazioni generali)