Gerarchia ed ereditarietà dei file di configurazione di ASP.NET

Aggiornamento: novembre 2007

È possibile distribuire i file di configurazione di ASP.NET nelle diverse directory delle applicazioni in modo da configurare le applicazioni ASP.NET in una gerarchia di ereditarietà. Questa struttura consente di raggiungere il livello di dettaglio della configurazione richiesto dalle applicazioni nei livelli di directory appropriati, senza influenzare le impostazioni di configurazione nei livelli di directory superiori.

Di seguito sono elencate le diverse sezioni di questo argomento:

  • Struttura della configurazione

  • Ereditarietà di configurazione

  • Ambito delle impostazioni di configurazione

  • Calcolo delle impostazioni di configurazione in fase di esecuzione

  • Configurazione di più risorse ASP.NET in un singolo file

  • Conflitti tra le impostazioni dei percorsi virtuali e fisici

  • Limitazione dell'ereditarietà ASP.NET

Struttura della configurazione

I file di configurazione di ASP.NET sono denominati Web.config e possono essere presenti in più directory delle applicazioni ASP.NET. La gerarchia di configurazione di ASP.NET presenta le caratteristiche seguenti:

  • Consente di utilizzare i file di configurazione che si applicano alle risorse presenti nella directory di appartenenza del file e a tutte le directory figlio.

  • Consente di inserire i dati di configurazione nell'ambito appropriato: l'intero computer, tutte le applicazioni Web, una singola applicazione o una sottodirectory all'interno dell'applicazione.

  • Consente l'override delle impostazioni di configurazione ereditate dai livelli superiori della gerarchia di configurazione. Consente inoltre di bloccare le impostazioni di configurazione in modo da impedirne l'override da parte di quelle presenti in un livello inferiore.

  • Consente di organizzare in sezioni i gruppi logici delle impostazioni di configurazione.

Ereditarietà di configurazione

Tutte le applicazioni .NET Framework ereditano le impostazioni di configurazione di base e quelle predefinite da un file denominato systemroot\Microsoft .NET\Framework\versionNumber\CONFIG\Machine.config, utilizzato per le impostazioni di configurazione del server. Per alcune di queste impostazioni non è possibile eseguire l'override nei file di configurazione presenti a livelli inferiori della gerarchia.

Nelle applicazioni client .NET (console e Windows) per eseguire l'override delle impostazioni ereditate vengono utilizzati file di configurazione denominati ApplicationName.config. Per eseguire la medesima operazione, nelle applicazioni ASP.NET vengono utilizzati file di configurazione denominati Web.config.

L'elemento principale della gerarchia di configurazione di ASP.NET è un file denominato Web.config principale, presente nella stessa directory del file Machine.config. Il file Web.config principale eredita tutte le impostazioni del file Machine.config e contiene impostazioni utilizzabili per tutte le applicazioni ASP.NET che eseguono una versione specifica di .NET Framework. Poiché ogni applicazione ASP.NET eredita le impostazioni di configurazione predefinite dal file Web.config principale, è necessario creare file Web.config esclusivamente per le impostazioni che eseguono l'override di quelle predefinite.

Ereditarietà negli elementi dell'insieme

Alcuni elementi di configurazione, quali namespaces ecustomErrors, sono insiemi.

Negli insiemi le impostazioni di configurazione vengono in genere aggiunte all'insieme mediante un elemento add figlio e vengono rimosse in base al nome della chiave mediante un elemento remove figlio. In alternativa, è possibile eliminare l'intero elemento mediante un elemento clear figlio. A meno che non siano consentiti duplicati, un'impostazione aggiunta in un file di configurazione figlio esegue l'override di un'impostazione con lo stesso nome di chiave presente in un file di configurazione padre.

Nota:

Alcuni insiemi disponibili nelle versioni precedenti di .NET Framework utilizzano un nome di elemento diverso per l'elemento add figlio. Ad esempio, l'elemento customErrors utilizza un elemento error figlio per aggiungere errori personalizzati all'insieme.

Se viene ricevuta la richiesta di un file non esistente nella directory SubDir1, ASP.NET inizia la ricerca nella gerarchia di configurazione a partire dal file Web.config locale, che si trova nella directory corrente eventualmente esistente o in una directory padre. La ricerca in corso riguarda un elemento Elemento error per customErrors (schema delle impostazioni ASP.NET) in cui l'attributo statusCode equivale a "404". Una volta individuata l'impostazione di configurazione relativa all'errore 404, in risposta viene restituito l'URL presente nell'attributo redirect.

Ambito delle impostazioni di configurazione

Le impostazioni di configurazione possono avere ambiti di vario tipo. Alcune possono avere ambito globale, altre possono essere considerate effettive solo nell'ambito di un'applicazione, del file Web.config principale o del file Machine.config.

L'ambito di una sezione di configurazione viene definito nell'attributo allowDefinition dell'elemento Elemento section per configSections (schema delle impostazioni generali) presente nel file Machine.config di tutte le sezioni incluse in ASP.NET. Ad esempio, l'elemento Elemento authentication (schema delle impostazioni ASP.NET) ha un attributo allowDefinition dell'elemento MachineToApplication. In altri termini, l'elemento authentication può essere impostato nel file Machine.config, nel file Web.config principale e in un file Web.config a livello dell'applicazione. Se viene impostato a livello di sottodirectory, verrà generato un errore. Se per una sezione non sono stati definiti attributi allowDefinition, il valore predefinito sarà Everywhere.

L'ambito di un'impostazione di configurazione viene riportato per ogni elemento in Impostazioni di configurazione di ASP.NET e Impostazioni di configurazione generali (ASP.NET), all'interno della tabella Informazioni elemento accanto a Percorsi configurabili.

Nella tabella riportata di seguito vengono elencati i livelli della gerarchia di configurazione corrispondenti ai diversi file. Per ciascun file sono inoltre presenti il nome e una descrizione delle principali caratteristiche di ereditarietà.

Livello di configurazione

Nome file

Descrizione file

Server

Machine.config

Il file Machine.config contiene lo schema ASP.NET di tutte le applicazioni Web sul server. Questo file è il primo della gerarchia di unione delle configurazioni.

Web principale

Web.config

Il file Web.config del server è memorizzato nella stessa directory del file Machine.config e contiene i valori predefiniti relativi alla maggior parte delle sezioni di configurazione system.web. In fase di esecuzione, questo file è il secondo della gerarchia di configurazione, a partire dall'alto, ad essere unito.

Sito Web

Web.config

Il file Web.config di un sito Web specifico contiene le impostazioni che si applicano al sito Web che vengono ereditate da tutte le applicazioni ASP.NET e le sottodirectory sottostanti del sito.

Directory principale dell'applicazione ASP.NET

Web.config

Il file Web.config di un'applicazione ASP.NET specifica si trova nella directory principale dell'applicazione e contiene le impostazioni utilizzate per l'applicazione Web che vengono ereditate da tutte le sottodirectory sottostanti della relativa diramazione.

Sottodirectory dell'applicazione ASP.NET

Web.config

Il file Web.config di una sottodirectory dell'applicazione contiene le impostazioni utilizzate per la sottodirectory in questione ed ereditate da tutte le sottodirectory sottostanti della relativa diramazione.

Directory dell'applicazione client

ApplicationName.config

Il file ApplicationName.config contiene le impostazioni di un'applicazione client Windows (non di un'applicazione Web).

Elemento ProcessModel

Il modello di processo utilizzato per l'intero server, incluse tutte le applicazioni ASP.NET presenti su di esso, viene configurato da un solo elemento, ovvero Elemento processModel (schema delle impostazioni ASP.NET). Pertanto, le impostazioni di processModel possono essere inserite solo nel file Machine.config e non possono essere sottoposte a override dalle impostazioni presenti nei file Web.config.

Le modifiche apportate all'elemento processModel hanno effetto solo quando si riavvia il processo di lavoro e non subito dopo avere modificato l'impostazione, come accade con gli altri elementi di configurazione.

Nota:

Quando ASP.NET viene eseguito con Internet Information Services (IIS) 6.0 nella modalità di isolamento del processo di lavoro, viene utilizzato il modello di processo IIS 6.0, mentre le impostazioni della sezione processModel del file Machine.config vengono ignorate. Per configurare l'identità, i cicli e altri valori del modello di processo, utilizzare Gestione IIS per configurare il processo di lavoro di IIS dell'applicazione. ASP.NET 2.0 non verrà eseguito quando si configura IIS 6.0 per l'esecuzione di ASP.NET in modalità di isolamento IIS 5.0.

Calcolo delle impostazioni di configurazione in fase di esecuzione

Quando il server riceve una richiesta per una risorsa Web specifica, in ASP.NET vengono calcolate le impostazioni di configurazione per quella risorsa in modo gerarchico utilizzando tutti i file di configurazione posizionati nel percorso della directory virtuale per l'URL richiesto. Le impostazioni di configurazione locali eseguono l'override di quelle presenti nei file di configurazione padre.

Le impostazioni vengono calcolate una sola volta, quindi vengono memorizzate nella cache nel corso delle successive richieste. ASP.NET verifica automaticamente le modifiche apportate ai file ed esegue una nuova valutazione della cache ogni volta che vengono modificati i file di configurazione all'interno della gerarchia del file specifico. Quando il server riceve una richiesta di un determinato URL, ASP.NET esegue la ricerca della risorsa richiesta utilizzando la gerarchia delle impostazioni di configurazione della cache.

Quando viene apportata una modifica alla configurazione, l'applicazione viene riavviata, a meno che l'elemento della sezione di configurazione non includa un attributo restartOnExternalChanges="false" o che l'impostazione di configurazione non sia presente in un file separato collegato al file Web.config mediante un attributo configSource.

Configurazione di più risorse ASP.NET in un singolo file

Per la gestione di un numero elevato di impostazioni di configurazione o di siti Web client in un'impostazione ISP, potrebbe risultare utile memorizzare le impostazioni di più posizioni in un unico file Web.config. L'utilizzo dell'attributo path dell'elemento location consente di configurare più risorse ASP.NET specifiche memorizzate nelle sottodirectory dell'applicazione.

Per informazioni sulle modalità di utilizzo dell'elemento location, vedere Procedura: configurare directory specifiche utilizzando le impostazioni posizione.

Conflitti tra le impostazioni delle directory virtuali e fisiche

Le impostazioni di configurazione per le directory virtuali sono indipendenti dalla struttura delle directory fisiche. Le directory virtuali devono essere organizzate con estrema attenzione per evitare problemi di configurazione. Si supponga di avere un file ASP.NET denominato MyResource.aspx con la struttura di directory fisica riportata di seguito.

C:
    \Subdir1
        \Subdir2
            \MyResource.aspx

Si supponga inoltre di avere un file di configurazione presente in Subdir1, una directory virtuale denominata Vdir1 associata a c:\Subdir1 e una directory virtuale denominata Vdir2 associata a c:\Subdir1\Subdir2. Se un client accede alla risorsa con la posizione fisica di c:\Subdir1\Subdir2\MyResource.aspx utilizzando l'URL https://localhost/vdir1/subdir2/MyResource.aspx, la risorsa erediterà le impostazioni di configurazione da Vdir1. Se, invece, il client accede alla stessa risorsa utilizzando l'URL https://localhost/vdir2/MyResource.aspx, la risorsa non erediterà le impostazioni da Vdir1. La creazione di directory virtuali così strutturate può determinare risultati imprevisti o anche un errore dell'applicazione. È consigliabile evitare la nidificazione delle directory virtuali oppure, nel caso venga eseguita, è preferibile utilizzare solo un file Web.config.

Limitazione dell'ereditarietà ASP.NET

È possibile limitare l'ereditarietà delle impostazioni di configurazione per ottimizzare le prestazioni dell'applicazione, mantenere un livello elevato di affidabilità e semplificare l'amministrazione. Le restrizioni sono controllate dagli attributi allowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem e lockElements. Per ulteriori informazioni su questi attributi, vedere Attributi generali ereditati da elementi di sezioni.

Impostazioni di configurazione per le eccezioni non gestite

Durante la creazione dell'applicazione ASP.NET, le impostazioni contenute nel file Aspnet.config vengono elaborate da Common Language Runtime (CLR). Queste impostazioni, fra le altre, indicano a CLR come elaborare le eccezioni non gestite. L'impostazione di configurazione in questione è la seguente:

<legacyUnhandledExceptionPolicy enabled="false" />

Per ulteriori informazioni, vedere Eccezioni in thread gestiti.

Vedere anche

Attività

Procedura: configurare directory specifiche utilizzando le impostazioni posizione

Procedura: bloccare le impostazioni di configurazione di ASP.NET

Riferimenti

Attributi generali ereditati da elementi di sezioni