ASP.NET-Konfigurationsdateihierarchie und Vererbung

Aktualisiert: November 2007

Sie können ASP.NET-Konfigurationsdateien in allen Verzeichnissen einer Anwendung verteilen, um ASP.NET-Anwendungen in einer Vererbungshierarchie zu konfigurieren. Mithilfe dieser Konfigurationsstruktur wird das erforderliche Maß an Konfigurationsgenauigkeit erreicht, das für die Anwendungen auf der entsprechenden Verzeichnisebene notwendig ist, ohne dass die Konfigurationseinstellungen auf höheren Ebenen davon betroffen sind.

Dieses Thema enthält folgende Abschnitte:

  • Konfigurationsstruktur

  • Konfigurationsvererbung

  • Gültigkeitsbereich von Konfigurationseinstellungen

  • Berechnen der Konfigurationseinstellungen zur Laufzeit

  • Mehrere in einer Datei konfigurierte ASP.NET-Ressourcen

  • Konflikte zwischen Einstellungen in virtuellen und physischen Verzeichnissen

  • Beschränken der ASP.NET-Vererbung

Konfigurationsstruktur

Die ASP.NET-Konfigurationsdateien haben den Dateinamen Web.config und können in mehreren Verzeichnissen von ASP.NET-Anwendungen gespeichert sein. Die ASP.NET-Konfigurationshierarchie ist durch folgende Eigenschaften gekennzeichnet:

  • Es werden Konfigurationsdateien verwendet, die sowohl auf die Ressourcen des Verzeichnisses, in dem die jeweilige Konfigurationsdatei gespeichert ist, als auch auf die dieser Datei untergeordneten Verzeichnisse angewendet werden.

  • Konfigurationsdaten können entsprechend ihrem vorgesehenen Gültigkeitsbereich platziert werden. Der Anwendungsbereich kann der gesamte Computer, alle Webanwendungen, eine einzelne Anwendung oder ein Unterverzeichnis innerhalb der Anwendung sein.

  • Die ASP.NET-Konfigurationshierarchie erlaubt das Überschreiben von Konfigurationseinstellungen, die von höheren Ebenen der Konfigurationshierarchie geerbt werden. Die Konfigurationseinstellungen können außerdem gesperrt werden, damit sie nicht von Konfigurationseinstellungen einer niedrigeren Ebene überschrieben werden.

  • Logisch verwandte Konfigurationseinstellungen werden nach Abschnitten gegliedert.

Konfigurationsvererbung

Alle .NET Framework-Anwendungen erben die grundlegenden Konfigurationseinstellungen und Standardeinstellungen von einer Datei mit dem Namen Systemstamm\Microsoft .NET\Framework\Versionsnummer\CONFIG\Machine.config. Die Datei Machine.config wird für serverweite Konfigurationseinstellungen verwendet. Einige dieser Einstellungen können nicht in Konfigurationsdateien überschrieben werden, die sich in der Hierarchie weiter unten befinden.

Die .NET-Clientanwendungen (Konsolen- und Windows-Anwendungen) verwenden Konfigurationsdateien mit dem Namen Anwendungsname.config, um geerbte Einstellungen zu überschreiben. Die ASP.NET-Anwendungen verwenden Konfigurationsdateien mit dem Namen Web.config, um geerbte Einstellungen zu überschreiben.

Der Stamm der ASP.NET-Konfigurationshierarchie ist eine Datei, die als Stammdatei Web.config bezeichnet wird. Diese Datei ist im selben Verzeichnis wie die Datei Machine.config gespeichert. Die Stammdatei Web.config erbt alle Einstellungen der Datei Machine.config. Die Stammdatei Web.config enthält Einstellungen, die auf alle ASP.NET-Anwendungen einer bestimmten .NET Framework-Version angewendet werden. Da jede ASP.NET-Anwendung die Standardkonfigurationseinstellungen von der Stammdatei Web.config erbt, müssen Sie die Dateien Web.config nur für diejenigen Einstellungen erstellen, die die Standardeinstellungen überschreiben.

Vererbung in Auflistungselementen

Einige Konfigurationselemente sind Auflistungen, z. B. das namespaces-Element und das customErrors-Element.

In Auflistungen werden Konfigurationseinstellungen in der Regel mithilfe des untergeordneten add-Elements hinzugefügt oder mit dem untergeordneten remove-Element über einen Schlüsselnamen entfernt. Gelöscht wird die gesamte Auflistung mit dem untergeordneten clear-Element. Solange keine Duplikate erlaubt sind, überschreibt eine Einstellung, die einer untergeordneten Konfigurationsdatei hinzugefügt wurde, eine Einstellung mit gleichem Schlüsselnamen in einer übergeordneten Konfigurationsdatei.

Hinweis:

Einige Auflistungen aus früheren .NET Framework-Versionen verwenden einen anderen Elementnamen für das untergeordnete add-Element. Zum Beispiel verwendet das customErrors-Element ein untergeordnetes error-Element, um der Auflistung benutzerdefinierte Fehler hinzuzufügen.

Wenn eine Anforderung für eine nicht vorhandene Datei im Verzeichnis SubDir1 eingeht, durchsucht ASP.NET die Konfigurationshierarchie und beginnt dabei mit der nächstliegenden Datei Web.config (die Datei Web.config, die sich – falls vorhanden – im aktuellen Verzeichnis oder in einem übergeordneten Verzeichnis befindet). ASP.NET sucht nach einem error-Element für customErrors (ASP.NET-Einstellungsschema)-Element, in dem das statusCode-Attribut den Wert "404" hat. Sobald ASP.NET die Konfigurationseinstellung für den Fehler 404 gefunden hat, wird der URL aus dem redirect-Attribut als Antwort zurückgegeben.

Gültigkeitsbereich von Konfigurationseinstellungen

Konfigurationseinstellungen können verschiedene Gültigkeitsbereiche haben. Einige gelten global, andere nur für den Gültigkeitsbereich der Anwendung, der Stammdatei Web.config oder der Datei Machine.config.

Der Gültigkeitsbereich eines Konfigurationsabschnitts wird in der Datei Machine.config im allowDefinition-Attribut des section-Element für configSections (allgemeines Einstellungsschema)-Elements für alle Abschnitte in ASP.NET definiert. Zum Beispiel verfügt das authentication-Element (ASP.NET-Einstellungsschema)-Element über ein allowDefinition-Attribut des MachineToApplication-Elements. Dies bedeutet, dass das authentication-Element in der Datei Machine.config, in der Stammdatei Web.config oder in einer Datei Web.config auf Anwendungsebene festgelegt werden kann. Beim Festlegen des Elements auf Unterverzeichnisebene wird ein Fehler ausgelöst. Wenn für einen Abschnitt kein allowDefinition-Attribut definiert wurde, ist der Standardwert Everywhere.

Der Gültigkeitsbereich einer Konfigurationseinstellung wird für jedes Element in ASP.NET-Konfigurationseinstellungen und Allgemeine Konfigurationseinstellungen (ASP.NET) in der Tabelle Elementinformationen neben Konfigurierbare Speicherorte aufgelistet.

In der folgenden Tabelle werden die Konfigurationsebene, auf der sich die jeweilige Datei in der Konfigurationshierarchie befindet, der Dateiname sowie eine Beschreibung der wichtigen Vererbungsmerkmale der jeweiligen Datei aufgeführt.

Konfigurationsebene

Dateiname

Dateibeschreibung

Server

Machine.config

Die Datei Machine.config enthält das ASP.NET-Schema für alle Webanwendungen auf dem Server. Sie befindet sich an der Spitze der Konfigurationszusammenführungshierarchie.

Stammweb

Web.config

Die Datei Web.config für den Server wird im gleichen Verzeichnis wie die Datei Machine.config gespeichert und enthält Standardwerte für fast alle system.web-Konfigurationsabschnitte. Zur Laufzeit wird diese Datei gemäß der Reihenfolge in der Konfigurationshierarchie von oben nach unten als Zweites zusammengeführt.

Website

Web.config

Die Datei Web.config einer bestimmten Website enthält Einstellungen, die für die jeweilige Website gelten und an alle ASP-Anwendungen und Unterverzeichnisse im absteigenden Pfadverlauf der Site weitervererbt werden.

Stammverzeichnis der ASP.NET-Anwendung

Web.config

Die Datei Web.config für eine bestimmte ASP.NET-Anwendung befindet sich im Stammverzeichnis der Anwendung und enthält Einstellungen, die für die jeweilige Webanwendung gelten. Die Einstellungen werden an alle Unterverzeichnisse der Pfadverzweigung weitervererbt.

Unterverzeichnis der ASP.NET-Anwendung

Web.config

Die Datei Web.config eines Anwendungsunterverzeichnisses enthält die für dieses Unterverzeichnis geltenden Einstellungen. Die Einstellungen werden an alle Unterverzeichnisse der Pfadverzweigung weitervererbt.

Clientanwendungsverzeichnis

Anwendungsname.config

Die Datei Anwendungsname.config enthält Einstellungen für eine Windows-Clientanwendung (keine Webanwendung).

Das ProcessModel-Element

Das processModel-Element (ASP.NET-Einstellungsschema)-Element konfiguriert das Verarbeitungsmodell, das für den Server verwendet wird, einschließlich aller ASP.NET-Anwendungen, die sich auf dem Server befinden. Aus diesem Grund können processModel-Einstellungen nur in die Datei Machine.config eingefügt werden und auch nicht von anderen Einstellungen einer Datei Web.config überschrieben werden.

Änderungen am processModel-Element werden erst wirksam, wenn der Workerprozess neu gestartet wird und nicht sofort nach der Einstellungsänderung, wie dies bei anderen Konfigurationselementen der Fall ist.

Hinweis:

Wenn ASP.NET unter Internetinformationsdienste (IIS) 6.0 im Workerprozess-Isolierungsmodus ausgeführt wird, kommt das IIS 6.0-Verarbeitungsmodell zum Einsatz, und die Einstellungen im processModel-Abschnitt der Datei Machine.config werden ignoriert. Verwenden Sie den IIS-Manager, um die Prozessidentität, Zyklen und andere Prozessmodellwerte zu konfigurieren. Konfigurieren Sie mithilfe des IIS-Managers den IIS-Workerprozess für die Anwendung. ASP.NET 2.0 wird nicht ausgeführt, wenn Sie IIS 6.0 zur Ausführung von ASP.NET im IIS 5.0-Isolierungsmodus konfigurieren.

Berechnen der Konfigurationseinstellungen zur Laufzeit

Wenn der Server eine Anforderung für eine bestimmte Webressource empfängt, berechnet ASP.NET die Konfigurationseinstellungen für die jeweilige Ressource in hierarchischer Weise. Dazu werden alle Konfigurationsdateien im virtuellen Verzeichnispfad des angeforderten URLs herangezogen. Die lokalen Konfigurationseinstellungen überschreiben die Einstellungen in übergeordneten Konfigurationsdateien.

Diese Einstellungen werden einmal berechnet und dann für nachfolgende Anforderungen zwischengespeichert. Dateiänderungen werden von ASP.NET automatisch registriert. Bei Änderung einer beliebigen Konfigurationsdatei innerhalb der Hierarchie dieser Datei wird der Cache von ASP.NET neu berechnet. Wenn der Server eine Anforderung für einen bestimmten URL erhält, verwendet ASP.NET die Hierarchie der Konfigurationseinstellungen im Cache, um nach der angeforderten Ressource zu suchen.

Die Anwendung wird nach der Konfigurationsänderung neu gestartet. Es wird kein Neustart ausgeführt, wenn das Konfigurationsabschnittselement ein restartOnExternalChanges="false"-Attribut enthält oder wenn die Konfigurationseinstellung in einer separaten Datei gespeichert ist, die über ein configSource-Attribut mit der Datei Web.config verknüpft ist.

Mehrere in einer Datei konfigurierte ASP.NET-Ressourcen

Wenn Sie eine große Anzahl von Konfigurationseinstellungen oder auch Clientwebsites in einer ISP-Umgebung verwalten, kann es unter Umständen sinnvoll sein, die Einstellungen der vielen Speicherorte in einer einzigen Datei Web.config zu speichern. Mit dem path-Attribut des location-Elements lassen sich viele spezifische ASP.NET-Ressourcen konfigurieren, die in Anwendungsunterverzeichnissen gespeichert sind.

Informationen über die Verwendung des location-Elements finden Sie unter Gewusst wie: Konfigurieren von bestimmten Verzeichnissen mit Standorteinstellungen.

Konflikte zwischen Einstellungen in virtuellen und physischen Verzeichnissen

Da Konfigurationseinstellungen für virtuelle Verzeichnisse unabhängig von der physischen Verzeichnisstruktur sind, sollten virtuelle Verzeichnisse mit Sorgfalt organisiert werden, um Konfigurationsprobleme zu vermeiden. Angenommen, Sie verfügen über eine ASP.NET-Datei mit dem Namen MyResource.aspx, die die folgende physische Verzeichnisstruktur hat:

C:
    \Subdir1
        \Subdir2
            \MyResource.aspx

Darüber hinaus haben Sie möglicherweise eine Konfigurationsdatei im Verzeichnis Subdir1, ein virtuelles Verzeichnis mit dem Namen Vdir1, das c:\Subdir1 zugeordnet ist, und ein virtuelles Verzeichnis mit dem Namen Vdir2, das c:\Subdir1\Subdir2 zugeordnet ist. Wenn nun ein Client über den URL https://localhost/vdir1/subdir2/MyResource.aspx auf die Ressource mit dem physischen Speicherort c:\Subdir1\Subdir2\MyResource.aspx zugreift, erbt die Ressource die Konfigurationseinstellungen von Vdir1. Wenn der Client jedoch über den URL https://localhost/vdir2/MyResource.aspx auf die gleiche Ressource zugreift, erbt die Ressource keine Einstellungen von Vdir1. Wenn Sie virtuelle Verzeichnisse auf diese Weise erstellen, kann dies zu unerwarteten Ergebnissen oder sogar zu einem Anwendungsfehler führen. Es wird empfohlen, virtuelle Verzeichnisse nicht zu schachteln. Wenn Sie Verzeichnisse dennoch schachteln möchten, sollten Sie nur eine Datei Web.config verwenden.

Beschränken der ASP.NET-Vererbung

Sie können die Vererbung von Konfigurationseinstellungen beschränken, um damit eine höhere Anwendungsleistung und eine gleichbleibend hohe Verlässlichkeit zu erzielen sowie die Verwaltung zu vereinfachen. Beschränkungen werden mithilfe der Attribute allowOverride, lockAttributes, lockAllAttributesExcept, lockAllElementsExcept, lockItem und lockElements gesteuert. Weitere Informationen zu diesen Attributen finden Sie unter Allgemeine von Abschnittselementen geerbte Attribute.

Konfigurationseinstellungen für nicht behandelte Ausnahmen

Bei der Erstellung der ASP.NET-Anwendung werden die in der Datei Aspnet.config enthaltenen Einstellungen von der Common Language Runtime (CLR) verarbeitet. Diese Einstellungen bestimmen neben anderen Einstellungen, wie die CLR nicht behandelte Ausnahmen verarbeitet. Die entsprechende Konfigurationseinstellung lautet wie folgt:

<legacyUnhandledExceptionPolicy enabled="false" />

Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads.

Siehe auch

Aufgaben

Gewusst wie: Konfigurieren von bestimmten Verzeichnissen mit Standorteinstellungen

Gewusst wie: Sperren von ASP.NET-Konfigurationseinstellungen

Referenz

Allgemeine von Abschnittselementen geerbte Attribute