Hiérarchie du fichier de configuration ASP.NET et héritage

Mise à jour : novembre 2007

Vous pouvez distribuer des fichiers de configuration ASP.NET dans tous vos répertoires d'application pour configurer des applications ASP.NET dans une hiérarchie d'héritage. Cette structure vous permet d'atteindre le niveau de détail de configuration requis par vos applications au niveau des répertoires appropriés sans affecter les paramètres de configuration des niveaux plus élevés.

Cette rubrique contient les sections suivantes :

  • Structure de configuration

  • Héritage de configuration

  • Portée des paramètres de configuration

  • Calcul des paramètres de configuration au moment de l'exécution

  • Configuration de plusieurs ressources ASP.NET en un seul fichier

  • Conflits entre des paramètres de répertoires virtuels et physiques

  • Limitation de l'héritage ASP.NET

Structure de configuration

Les fichiers de configuration ASP.NET sont des fichiers Web.config qui peuvent apparaître dans plusieurs répertoires d'applications ASP.NET. La hiérarchie de configuration ASP.NET présente les caractéristiques suivantes :

  • Elle utilise des fichiers de configuration qui s'appliquent aux ressources du répertoire dans lequel est placé le fichier de configuration et à tous ses répertoires enfants.

  • Elle vous permet de placer des données de configuration à l'emplacement approprié (l'ordinateur, toutes les applications Web, une application individuelle ou un sous-répertoire de l'application) selon la portée dont vous avez besoin.

  • Elle permet la substitution de paramètres de configuration hérités des niveaux supérieurs de la hiérarchie de configuration. Elle autorise également le verrouillage des paramètres de configuration afin d'empêcher leur substitution par des paramètres de configuration de niveau inférieur.

  • Elle organise des groupes logiques de paramètres de configuration en sections.

Héritage de configuration

Toutes les applications du .NET Framework héritent des paramètres de configuration de base et des valeurs par défaut d'un fichier nommé systemroot\Microsoft .NET\Framework\numéroVersion\CONFIG\Machine.config. Le fichier Machine.config est utilisé pour définir des paramètres de configuration au niveau du serveur. Certains de ces paramètres ne peuvent pas être substitués dans les fichiers de configuration situés à un niveau inférieur de la hiérarchie.

Les applications clientes .NET (applications console et Windows) utilisent des fichiers de configuration nommés NomApplication.config pour substituer les paramètres hérités. Les applications ASP.NET utilisent les fichiers de configuration nommés Web.config pour substituer des paramètres hérités.

La racine de la hiérarchie de configuration ASP.NET est un fichier connu sous le nom de fichier Web.config racine et il est situé dans le même répertoire que le fichier Machine.config. Le fichier Web.config racine hérite de tous les paramètres du fichier Machine.config. Le fichier Web.config racine inclut des paramètres qui s'appliquent à toutes les applications ASP.NET exécutant une version spécifique du .NET Framework. Dans la mesure où chaque application ASP.NET hérite des paramètres de configuration par défaut du fichier Web.config racine, vous devez créer uniquement des fichiers Web.config pour les paramètres qui se substituent aux paramètres par défaut.

Héritage dans les éléments de collection

Certains éléments de configuration représentent des collections, l'élément namespaces et l'élément customErrors par exemple.

Dans les collections, les paramètres de configuration sont généralement ajoutés à la collection via un élément enfant add et supprimés par nom de clé via un élément enfant remove. En outre, la collection entière peut être supprimée via un élément enfant clear. Un paramètre ajouté dans un fichier de configuration enfant se substitue à un paramètre portant le même nom de clé dans un fichier de configuration parent sauf si les doublons sont autorisés.

Remarque :

Certaines collections, présentes dans les versions antérieures du .NET Framework, utilisent un nom d'élément différent pour l'élément enfant add. Par exemple, l'élément customErrors utilise un élément enfant error pour ajouter des erreurs personnalisées à la collection.

Lors de la réception d'une demande pour un fichier du répertoire SubDir1 qui n'existe pas, ASP.NET effectue une recherche dans la hiérarchie de configuration, en partant du fichier Web.config le plus local (situé dans le répertoire actif, s'il existe, ou dans un répertoire parent). ASP.NET recherche un élément error, élément de customErrors (Schéma des paramètres ASP.NET) où l'attribut statusCode est égal à "404". Dès qu'ASP.NET a trouvé le paramètre de configuration de l'erreur 404, l'URL dans l'attribut redirect est retournée comme réponse.

Portée des paramètres de configuration

Les paramètres de configuration ont des portées différentes, certains ont une portée globale tandis que d'autres ne s'appliquent qu'à l'application, au fichier Web.config racine ou au fichier Machine.config.

La portée d'une section de configuration est définie dans l'attribut allowDefinition de l'élément section (voir section, élément de configSections (Schéma des paramètres généraux)) dans le fichier Machine.config pour toutes les sections qui sont incluses avec ASP.NET. Par exemple, l'élément authentication (voir authentication, élément (Schéma des paramètres ASP.NET)) possède un attribut allowDefinition de l'élément MachineToApplication. Cela signifie que l'élément authentication peut être défini dans le fichier Machine.config, le fichier Web.config racine et un fichier Web.config au niveau de l'application. S'il est défini au niveau du sous-répertoire, une erreur est levée. Si aucun attribut allowDefinition n'est défini pour une section, la valeur par défaut est Everywhere.

La portée d'un paramètre de configuration est répertoriée pour chaque élément dans Paramètres de configuration ASP.NET et Paramètres généraux de configuration (ASP.NET), dans le tableau Informations sur les éléments en regard des emplacements configurables.

Le tableau suivant indique le niveau de chaque fichier dans la hiérarchie de configuration, le nom du fichier ainsi qu'une description des caractéristiques d'héritage importantes de chaque fichier.

Niveau de configuration

Nom du fichier

Description du fichier

Serveur

Machine.config

Le fichier Machine.config contient le schéma ASP.NET pour toutes les applications Web installées sur le serveur. Ce fichier figure tout en haut de la hiérarchie de fusion de configurations.

Racine Web

Web.config

Le fichier Web.config du serveur est stocké dans le même répertoire que le fichier Machine.config et contient des valeurs par défaut pour la plupart des sections de configuration system.web. Au moment de l'exécution, ce fichier est fusionné en deuxième position à partir du haut de la hiérarchie de configuration.

Site Web

Web.config

Le fichier Web.config d'un site Web spécifique contient des paramètres qui s'appliquent au site Web et sont hérités dans un ordre descendant dans toutes les applications ASP.NET et sous-répertoires du site.

Répertoire racine de l'application ASP.NET

Web.config

Le fichier Web.config d'une application ASP.NET spécifique est situé dans le répertoire racine de l'application et contient des paramètres qui s'appliquent à l'application Web et sont hérités dans un ordre descendant dans tous les sous-répertoires dans sa branche.

Sous-répertoire de l'application ASP.NET

Web.config

Le fichier Web.config d'un sous-répertoire d'application contient des paramètres qui s'appliquent à ce sous-répertoire et sont hérités dans un ordre descendant dans tous les sous-répertoires dans sa branche.

Répertoire d'application cliente

NomApplication.config

Le fichier NomApplication.config contient des paramètres d'une application cliente Windows (pas une application Web).

Élément ProcessModel

Un seul élément, à savoir processModel, élément (Schéma des paramètres ASP.NET), configure le modèle de traitement utilisé pour le serveur, y compris toutes les applications ASP.NET hébergées sur le serveur. Par conséquent, les paramètres processModel peuvent être placés uniquement dans le fichier Machine.config et ils ne peuvent pas être substitués par des paramètres d'un fichier Web.config.

Les modifications apportées à l'élément processModel n'entrent en vigueur que lorsque le processus de traitement est redémarré, pas immédiatement après la modification du paramètre comme avec d'autres éléments de configuration.

Remarque :

Lorsqu'ASP.NET s'exécute sous IIS 6.0 en mode d'isolation de processus de traitement, le modèle de processus IIS 6.0 est utilisé et les paramètres figurant dans la section processModel du fichier Machine.config sont ignorés. Pour configurer l'identité et le cycle des processus ou d'autres valeurs de modèle de processus, utilisez le Gestionnaire des services IIS pour configurer le processus de traitement IIS pour votre application. ASP.NET 2.0 ne s'exécute pas lorsque vous configurez IIS 6.0 pour exécuter ASP.NET en mode isolation IIS 5.0.

Calcul des paramètres de configuration au moment de l'exécution

Lorsque le serveur reçoit une demande pour une ressource Web particulière, ASP.NET calcule de manière hiérarchique les paramètres de configuration pour cette ressource, en utilisant tous les fichiers de configuration qui se trouvent dans le chemin d'accès du répertoire virtuel pour l'URL demandée. Les paramètres de configuration locaux se substituent aux paramètres des fichiers de configuration parents.

Ces paramètres sont calculés une seule fois, puis mis en cache pour les demandes suivantes. ASP.NET surveille automatiquement toute modification apportée aux fichiers et recalcule le cache lorsque l'un des fichiers de configuration de la hiérarchie de ce fichier est modifié. Lorsque le serveur reçoit une demande pour une URL particulière, ASP.NET utilise la hiérarchie des paramètres de configuration présents dans le cache pour localiser la ressource demandée.

L'application est redémarrée lorsqu'une modification de configuration est effectuée sauf si l'élément de section de configuration inclut un attribut restartOnExternalChanges="false", ou si le paramètre de configuration est contenu dans un fichier séparé lié au fichier Web.config à l'aide d'un attribut configSource.

Configuration de plusieurs ressources ASP.NET en un seul fichier

Lorsque vous gérez un grand nombre de paramètres de configuration ou des sites Web clients dans une configuration ISP, il peut être utile de stocker des paramètres pour plusieurs emplacements dans un seul fichier Web.config. À l'aide de l'attribut path de l'élément location, vous pouvez configurer de nombreuses ressources ASP.NET spécifiques, stockées dans les sous-répertoires d'application.

Pour plus d'informations sur l'utilisation de l'élément location, consultez Comment : configurer des répertoires spécifiques à l'aide des paramètres d'emplacement.

Conflits entre des paramètres de répertoires virtuels et physiques

Les paramètres de configuration pour les répertoires virtuels sont indépendants de la structure du répertoire physique et les répertoires virtuels doivent être soigneusement organisés pour éviter tout problème de configuration. Vous pouvez, par exemple, avoir un fichier ASP.NET nommé MyResource.aspx avec la structure de répertoires physiques suivante.

C:
    \Subdir1
        \Subdir2
            \MyResource.aspx

Par ailleurs, vous pouvez avoir un fichier de configuration situé dans Subdir1, un répertoire virtuel nommé Vdir1 mappé à c:\Subdir1, et un répertoire virtuel nommé Vdir2 mappé à c:\Subdir1\Subdir2. Si un client accède à la ressource avec l'emplacement physique de c:\Subdir1\Subdir2\MyResource.aspx à l'aide de l'URL https://localhost/vdir1/subdir2/MyResource.aspx, la ressource hérite des paramètres de configuration de Vdir1. En revanche, si le client accède à la même ressource à l'aide de l'URL https://localhost/vdir2/MyResource.aspx, elle n'hérite pas des paramètres de Vdir1. En créant les répertoires virtuels de cette manière, vous pouvez être confronté à des résultats inattendus, voire à une défaillance de l'application. Il est recommandé de ne pas imbriquer des répertoires virtuels, ou si vous le faites, d'utiliser un seul fichier Web.config.

Limitation de l'héritage ASP.NET

Vous pouvez souhaiter limiter l'héritage de paramètres de configuration pour améliorer les performances de l'application, préserver sa fiabilité et simplifier l'administration. Les restrictions sont contrôlées par les attributs allowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem et lockElements. Pour plus d'informations sur ces attributs, consultez Attributs généraux hérités par les éléments Section.

Paramètres de configuration pour les exceptions non gérées

Pendant la création de l'application ASP.NET, les paramètres contenus dans le fichier Aspnet.config sont traités par le Common Language Runtime (CLR). Ces paramètres, parmi d'autres, indiquent au CLR la façon de traiter les exceptions non gérées. Le paramètre de configuration en question est comme suit :

<legacyUnhandledExceptionPolicy enabled="false" />

Pour plus d'informations, consultez Exceptions dans les threads managés.

Voir aussi

Tâches

Comment : configurer des répertoires spécifiques à l'aide des paramètres d'emplacement

Comment : verrouiller des paramètres de configuration ASP.NET

Référence

Attributs généraux hérités par les éléments Section