Konfiguriert wird immer, daher hier eine kleine Auffrischung.
Die in den Beispielen verwendete web.config:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="demoConfiguration" type="WebConfigurationCustom.DemoSection, WebConfigurationCustom"/>
</configSections>
<demoConfiguration oneStringProperty="Ein Textwert" oneNumericProperty="25">
</demoConfiguration>
<appSettings>
<add key="OneSetting" value="http://www.OneUrl.com/services/OneService.asmx" />
<add key="AnotherSetting" value="http://www.AnotherUrl.com/services/AnotherService.asmx" />
</appSettings>
<connectionStrings>
<add name="AdventureWorksConnectionString"
connectionString="Data Source=COMPANION\SQL2005;Initial Catalog=AdventureWorks;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true"/>
<authentication mode="Windows"/>
</system.web>
</configuration>
Die Application Settings sind schon von NET 1.1 bekannt. Der Zugriff erfolgt jetzt über die ConfigurationManager Klasse.
string setting = ConfigurationManager.AppSettings["OneSetting"].ToString();
Neu ist der Konfigurationsabschnitt für Verbindungszeichenfolgen. Im connectionStrings Element der .config-Datei werden alle Datenbankverbindungen abgespeichert. Zugriff darauf gewährt ebenfalls die ConfigurationManager Klasse.
string connInfo = ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ProviderName
+ "\r\n" + ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ConnectionString;
Um auf die übrigen Konfigurationsabschnitte der web.config Datei zuzugreifen, wird für ASP.NET Anwendungen die WebConfigurationManager Klasse im System.Web.Configuration Namespace verwendet.
Die Configuration Klasse ist der Ausgangspunkt beim Zugriff auf die Konfigurationsdatei einer Anwendung. Sie bietet ebenfalls Zugriff auf die Application Settings und den Abschnitt für Connection Strings. Darüber hinaus kann man von ihr aber auch für jeden anderen Konfigurationsabschnitt in der web.config Datei ein passendes Section Objekt bekommen.
Nachfolgendes Beispiel liest den Authentifizierungsmodus ("Windows") aus der Konfigurationsdatei.
using System.Web.Configuration;
…
// den Pfad zur web.config im gleichen Verzeichnis basteln
String path = Request.CurrentExecutionFilePath;
path = path.Substring(0, path.LastIndexOf('/'));
// Configuration öffnen
Configuration config = WebConfigurationManager.OpenWebConfiguration(path);
// Authentication Section, Cast erforderlich
AuthenticationSection auth = (AuthenticationSection)config.GetSection("system.web/authentication");
string authInfo = string.Format("Authentication Mode: {0}",auth.Mode.ToString());
Genauso funktioniert das auch für andere Bereiche der Konfigurationsdatei. Der GetSection Methode den Pfad mitgeben und die Rückgabe entsprechend casten (CompilationSection, PagesSection, …)
Eine Section Klasse für den benutzerdefinierten Konfigurationsabschnitt demoConfiguration ist schnell erstellt. Eine Klassenbibliothek WebConfigurationCustom hinzufügen und darin eine Klasse DemoSection erzeugen, die von System.Configuration.ConfigurationSection erbt. Über das ConfigurationProperty Attribut wird die Zuordnung von Attributen und Elementen in der .config-Datei auf die Eigenschaften der Klasse hergestellt. Das wars.
using System.Configuration;
namespace WebConfigurationCustom
{
public class DemoSection : ConfigurationSection
{
[ConfigurationProperty("oneStringProperty", DefaultValue = "Standardwert", IsRequired = true)]
public string OneStringProperty
{
get { return this["oneStringProperty"].ToString(); }
set { this["oneStringProperty"] = value; }
}
[ConfigurationProperty("oneNumericProperty", DefaultValue = 666, IsRequired = false)]
public int OneNumericProperty
{
get { return (int)this["oneNumericProperty"]; }
set { this["oneNumericProperty"] = value; }
}
}
}
In der web.config muß nun die neue Section im Abschnitt configSections noch bekanntgegeben werden.
<section name="demoConfiguration" type="WebConfigurationCustom.DemoSection, WebConfigurationCustom"/>
Der Typ wird dabei als "Namespace.KlassenName, AssemblyName" angegeben. Auf der Webseite kann jetzt auf den neuen Konfigurationsabschnitt zugegriffen werden.
WebConfigurationCustom.DemoSection dc =
(DemoSection)WebConfigurationManager.GetSection("demoConfiguration");
string prop = dc.OneStringProperty; // = "Ein Textwert"
Einen guten Überblick mit vielen Beispielen zur Konfiguration von ASP.NET 2.0 im Allgemeinen und auch zur Verwendung der Management API gibt es unter http://www.asp.net/QuickStart/aspnet/doc/management/default.aspx