Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Web.Config 101

Geschrieben von: Christian Holm
Kategorie: ASP.NET

This printed page brought to you by AlphaSierraPapa

Die web.config Datei ist eine auf XML basierende, hierarchisch aufgebaute Textdatei die eine Vielzahl von Einstellungsmöglichkeiten für Ihre ASP.NET Applikationen erlaubt. Angefangen von Applikationseinstellungen, über DSN bis hin zu Optionen für Web Services. Der hierachische Aufbau erlaubt eine übersichtliche Gliederung und somit wird die Anpassung der web.config zum Kinderspiel. Daß dies nicht nur ein Marketingschlagwort ist, soll dieser Einführungsartikel zeigen.

Die web.config ist zusammen mit der machine.config das Herzstück jeder ASP.NET Applikation. Die machine.config ist dabei die Hauptkonfigurationsdatei von der sich alle anderen ASP.NET Konfigurationsdateien ableiten. Daher existiert die machine.config auch nur einmal auf dem Computer. Diese enthält die standardmäßigen Einstellungen für den jeweiligen Computer.

Die web.config, welche sich wie vorher schon erwähnt von der machine.config ableitet, kann je nach Bedarf beliebig oft auf dem ASP.NET Webserver existieren. Das bedeutet, Sie können für jede ASP.NET Applikation eine speziell angepaßte Konfigurationsdatei erstellen, da ASP.NET während der Laufzeit nach diesen Dateien sucht und die enthaltenen Einstellungen für jedes Verzeichnis extra und unabhängig parst.

Die hierachische Ableitung erfolgt von der ASP.NET Hauptkonfigurationsdatei (machine.config) bis in die einzelnen virtuellen Verzeichnisse jeder einzelnen am .NET Webserver befindlichen Applikation. Bildlich gesprochen sieht dies für einen Beispiel-.NET Webserver so aus:

Natürlich könnte z.B. die MyWebApp1 auch in einem anderen physikalischen Pfad liegen. Beachten Sie, daß die Erstellung der web.config optional ist, d.h. wenn in einem Verzeichnis keine vorhanden ist, so werden die Einstellungen der übergeordneten Ebene verwendet.

Die ASP.NET Runtime arbeitet diese Struktur bei einem URL Request ab. Natürlich wird dies nur einmal ausgeführt, da diese Einstellungen nach dem ersten Request im Cache abgelegt werden. Damit Änderungen nach dem ersten Durchlauf berücksichtigt werden können, setzt die ASP.NET Runtime einen Filewatcher auf diese Dateien und aktualisiert die gecacheten Dateien falls erforderlich.

Da die web.config auf XML basiert, kann diese auch XML Dokumentelemte enthalten, also auch neben den obligaten well-formed Tags auch Kommentare oder CData Sektionen. Die Codierung der Datei ist hierbei unwesentlich da ASP.NET diese automatisch erkennt und anpaßt. Die Codierung muß lediglich einem der gängigen Standards (z.B. UTF-8 oder Unicode) entsprechen.

Was kann die web.config nun alles enthalten? Dies ist eine ganze Menge: Applikationeinstellungen, sicherheitssensitive Einstellungen (Authentifikation und Autorisierung von Usern), Datenbankverbindungseinstellungen, Browsereinstellungen, Debugeinstellungen, Einstellungen für ASP.NET Web Services und mehr.

Alle diese Einstellungen sind übersichtlich in einzelne Sektionen unterteilt. Die web.config besitzt ein Hauptelement oder Tag - <configuration>. Dieser Tag kann drei unterschiedliche Elementtypen enthalten, welche innerhalb des <configuration>-Tags geschachtelt werden:

Bevor ich Ihnen eine Übersicht über die möglichen ASP.NET Section Handlers gebe, noch eine Anmerkung zum Casing in der web.config. Abgesehen davon, daß die XML Tags well-formed sein müssen, haben die Tags, Attributnamen und ihre Werte eine strikte Schreibweise:

Nun eine Übersicht zu den ASP.NET Section Handlern:

Section Name Beschreibung
<appSettings> Hier können Sie benutzerdefinierte Einträge wie DSNs eintragen. Dieser Handler ist sowohl in der machine.config als auch in allen web.configs zulässig
<authentication> Einstellungen für die ASP.NET Authentifizierungsunterstützung; notwendig um einen User durch einen Login eindeutig zu identifizieren
<authorization> Einstellungen für die ASP.NET Autorisierungsunterstützung; weist einem User anhand seiner Credentials den ihm zugewiesenen Bereich der Web Site zu
<browserCaps> Einstellungen für Browsereigenschaften
<compilation> Enthält Einstellungen für die ASP.NET Kompilierungsoptionen
<customErrors> Hier können Sie benutzerdefinierte Fehlermeldungen definieren, d.h. bei einem aufgetretenen, spezifischen Fehler wird per Redirect zu der eigens erstellten Seite gelinkt
<globalization> Enthält länderspezifische Einstellungen, wie z.B. Zeichensätze und Ländercodes (LCID, LoCale IDentifier)
<httpHandlers> Mappt Seiten-Requests auf das jeweilige Interface (IHttpHandler oder IHttpHandlerFactory)
<httpModules> Organisiert HTTP Module (eine Klasse oder Assembly (dll)) einer Applikation
<httpRuntime> Enthält die Einstellungen für die ASP.NET HTTP Runtime. Dieser Handler ist sowohl in der machine.config als auch in allen web.configs zulässig
<identity> Steuert die Application Identity mittels Client Impersonation
<machineKey> Einstellungen für die Erstellung von Schlüsseln anhand von Algorithmen (SHA1, MD5 3DES) welche über den RNGCryptoServiceProvider erstellt werden
<pages> Hier können Webseiten-spezifische Einstellungen gemacht werden
<processModel> Einstellungen für das ASP.NET Process Model des IIS. Z.b. für Timeouts, Request Limits
<securityPolicy> Definiert die Mappings für Policy Dateien. Dieser Handler ist sowohl in der machine.config als auch in allen web.configs zulässig
<sessionState> Konfiguriert den Session State des HTTP Modules
<trace> Einstellungen für die ASP.NET Trace Services. Diese Einstellungen sind ausschließlich für Testzwecke, also wenn Sie die ASP.NET Applikation entwickeln bzw. testen, da diese sensitive Daten enthält. Hat also im tatsächlichen Einsatz nichts verloren
<trust> Legt die Code Access Permissions für eine bestimmte Applikation fest. Diesen Einstellungen liegen wieder Policy Dateien zugrunde. Dieser Handler ist sowohl in der machine.config als auch in allen web.configs zulässig
<webServices> Beinhaltet Einstellungen für Web Services. Z.b. für die Festlegung der Protokolltypen, MIME Typen oder für die SOAP Extensions

Abschließend möchte ich noch auf ein paar Section Handlers mit einem Beispiel näher eingehen. Beginnen wir mit den <appSettings>. Diese könnte man in einer Beispiel web.config so verwenden, um einen DSN einer ASP.NET Site zur Verfügung zu stellen:

<configuration>
  <system.web>
  <appSettings>
    <add key="Northwind" value="server=(local)\NetSDK;database=Northwind;Trusted_Connection=yes;" />
  </appSettings>
  </system.web>
</configuration>

Um dann diesen DSN in einer ASP.NET Seite nützen zu können, ist zusätzlich der System.Configuration Namspace einzubinden, und folgender Code zu verwenden (siehe Beispiel). In diesem Beispiel baue ich die Verbindung mittels dem SqlDataAdapter auf und gehe wie gewohnt vor (der Einfachheit halber habe ich nur den serverseitigen Scriptblock angeführt):

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration" %>

<html>

<script language="C#" runat="server">

    void Page_Load(Object Src, EventArgs E ) {

        String MyDSN = ConfigurationSettings.AppSettings["Northwind"];

        SqlConnection myConnection = new SqlConnection(MyDSN);
        SqlDataAdapter myCommand = new SqlDataAdapter("SELECT * FROM Products", myConnection);

        DataSet ds = new DataSet();
        myCommand.Fill(ds, "Products");

        MyDataGrid.DataSource=new DataView(ds.Tables[0]);
        MyDataGrid.DataBind();
    }
</script>

Weiters möchte ich ein Beispiel für den <authentication> Section Handler geben. Wie in der Gegenüberstellung schon erwähnt, kann man hiermit eine Formular-basierde Authentifikation realisieren. Der folgende Ausschnitt aus einer web.config soll die notwendigen Einstellungen verdeutlichen:

<configuration>
<system.web>
    <authentication mode="Forms">
    
       <forms name="lg000" loginUrl="admin/Login/login.aspx" 
          protection="All" timeout="20" path="/" >
    
          <credentials passwordFormat="MD5">
             <user name="JDoe" password="nevergiveupneversurrender" />
          </credentials>  
       </forms>
    
    </authentication>
</system.web>
</configuration>

<authentication mode> setzt den Authentication Modus und ist hier auf Formular-basierend gesetzt. Dieser kann aber auch auf Windows Authentication, Microsoft Passport oder auf Anonym (None) gesetzt werden.

Der <forms> Tag enthält den Namen des Cookies (lg000), der für die Authentifizierung verwendet werden soll; den Redirect auf jene Seite, wenn der Login fehlschlägt (admin/Login/login.aspx); und die Sicherheitsstufe, wie der Cookie geschützt werden soll. Andere gültige Einstellungen sind noch Encryption, Validation oder None. Zusätzlich kann man noch einen Timeout (in Minuten) angeben, wann der Cookie abläuft, sowie den Pfad wo sich der Cookie befindet.

Unter <credentials> können die Credentials für die User eingetragen werden. Stattdessen kann aber auch eine Datenbankquelle für die einzelnen User angegeben werden (ist irgendwie bequemer).

Wie Sie durch das obige Beispiel sicherlich erkannt haben, können in der web.config auch Sicherheits-sensitive Daten als Klartext angeführt sein. Aus diesem Grund konfiguriert ASP.NET den IIS, daß ein Browser auf Dateien mit der Endung .config nicht direkt zugreifen kann und somit nicht in falsche Hände kommt. Wer es dennoch versucht, erhält folgenden Fehler:

Schlußbemerkung

Dies war ein kurzer Überblick über die Mächtigkeit der Einstellungen in der web.config. Durch die einfache Handhabung der XML basierten Datei ist die Konfigurierung und Absicherung von ASP.NET Applikationen sehr einfach und läßt kaum Wünsche offen.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010802.zip

Verwandte Artikel

Datenbankzugriff mittels ADO.NET
http:/www.aspheute.com/artikel/20001102.htm
Datentypen in C#
http:/www.aspheute.com/artikel/20000726.htm
Der ODBC .NET Data Provider
http:/www.aspheute.com/artikel/20020206.htm
Einstellungssache - Applikationsdaten in web.config
http:/www.aspheute.com/artikel/20011122.htm
Einstieg in Visual Studio.NET - die erste Webanwendung mit Visual C#
http:/www.aspheute.com/artikel/20031010.htm
Flash Movies einbetten einfach gemacht
http:/www.aspheute.com/artikel/20020321.htm
Formularbasierte Authentifizierung in fünf Minuten
http:/www.aspheute.com/artikel/20020705.htm
Index Server Abfragen per Web Service
http:/www.aspheute.com/artikel/20021107.htm
MS IE WebControls 101
http:/www.aspheute.com/artikel/20020801.htm
Tracing in ASP.NET
http:/www.aspheute.com/artikel/20001006.htm
Vergleich von DataGrid, DataList und Repeater-Control - was verwende ich wann?
http:/www.aspheute.com/artikel/20040303.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.