Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Saad Ladki
Einführung
IIS 7.0 und höher bieten eine umfassende API (Managed-Code Management Application Programming Interface), die die vollständige Manipulation der XML-Konfigurationsdateien und den bequemen Zugriff auf Serverobjekte ermöglicht. Dieses Dokument führt Sie durch die Verwendung der neuen Verwaltungs-API zum Ändern der Serverkonfiguration und zum Verwalten von Serverobjekten.
IIS enthält Microsoft.Web.Administration, eine neue Verwaltungs-API für den Webserver, die die Bearbeitung der Konfiguration durch vollständige Manipulation der XML-Konfigurationsdateien ermöglicht. Es bietet außerdem Komfortobjekte zum Verwalten des Servers, seiner Eigenschaften und des Zustands. Der Konfigurationsbearbeitungsaspekt der API bietet programmgesteuerten Zugriff auf Lese- und Schreibeigenschaften in der IIS-Konfigurationsdateihierarchie und bestimmten Konfigurationsdateien. Der Objektverwaltungsaspekt dieser API bietet eine Reihe von Verwaltungsobjekten der obersten Ebene für die direkte Verwaltung des Servers (z. B. Websites, Anwendungspools, Arbeitsprozesse usw.).
Die Verwaltungsklassen befinden sich im Microsoft.Web.Administration-Namespace. Die Klassen bieten eine schwach typisierte Schnittstelle für den Zugriff auf Konfigurationsabschnitte und Komfortobjekte mit Eigenschaften und Methoden, die Attribute der Konfiguration darstellen (z. B. den Pfad eines virtuellen Verzeichnisses) oder Aktionen für das Objekt (z. B. das Recycling eines Anwendungspools).
Erstellen einer neuen Website
Der folgende Code erstellt eine Website mit dem Titel "Racing Cars Site" mit der Stammanwendung und dem virtuellen Stammverzeichnis. Außerdem wird die Website so festgelegt, dass das HTTP-Protokoll an Port 80 verwendet wird und der physische Pfad unter d:\inetput\wwwroot\racing definiert wird.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing", 8080);
mySite.ServerAutoStart = true;
serverManager.CommitChanges();
}
}
}
Der ServerManager ist die Fabrikklasse, die einen Satz von Server-Hilfsobjekten enthält, für die Eigenschaften und Methoden stark typisiert verwendet werden können. Es ist der Haupteinstiegspunkt für die Verwaltung des Servers. Die Verwaltung des Servers könnte über andere umständliche Wege erfolgen (Zugriff auf unformatierte Konfigurations-XML oder Aufrufen von State-APIs), aber ist durch diese Objekte nahtlos. Die am häufigsten verwendeten Objekte stehen über den Server-Manager zur Verfügung: Anwendungen, virtuelle Verzeichnisse, Websites, Arbeitsprozesse und Anwendungsdomänen.
ServerManager serverManager = new ServerManager();
Das Sites-Objekt ermöglicht den Zugriff auf eine Websiteeigenschaften und -anwendungen. Es enthält auch Methoden, um dem System eine Website hinzuzufügen oder die Gesamtanzahl der Website abzurufen. Die Add-Methode definiert außerdem den Namen der Website, den pfad des virtuellen Stammverzeichnisses und die Portnummer als ganze Zahl. Beachten Sie außerdem, dass dieser Aufruf als Websiteobjekt, mySite, instanziiert wird, auf das wir dann auf die neu erstellte Website reagieren können, indem wir seine Eigenschaften direkt ändern.
Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing", 8080);
Die Komfortobjekte erleichtern das Ändern von Eigenschaften. Durch den Zugriff auf die Eigenschaften aus dem mySite-Objekt kann man die AutoStart-Eigenschaft der Website direkt auf "true" festlegen, ohne bestimmte XML-Attribut- oder Elementkonzepte zu kennen.
mySite.ServerAutoStart = true;
Ansonsten hätte eine andere Vorgehensweise zur Änderung der AutoStart-Eigenschaft darin bestehen können, kein Website-Objekt zu instanziieren. Rufen Sie stattdessen die Website ab, sobald sie erstellt wurde, und ändern Sie ihre Eigenschaften direkt. Das Verwaltungsobjekt verwendet das Konzept von Indexern, um nach bestimmten Objekten nach Schlüsseln wie Name oder Index zu suchen, ohne teure Aufrufe zur Liste des gesamten Objektsatzes ausführen zu müssen. Durch Definieren des Namens kann man das spezifische Objekt abrufen und darauf reagieren.
serverManager.Sites["Racing Cars Site"].ServerAutoStart = true;
Zum Aktualisieren führt der Commit-Änderungsaufruf die Transaktion aus, um die Konfiguration (sofern vorhanden) auf den Datenträger zu serialisieren.
serverManager.CommitChanges();
Durch Ausführen des obigen Codes wird die folgende Ausgabe in applicationHost.config innerhalb des Abschnitts generiert. Anstatt den XML-Code direkt zu bearbeiten und auf Element- und Attributebene zu arbeiten, bietet die Verwendung der Server-Manager-Objekte eine bequeme Möglichkeit zum Verwalten des Webservers.
<site name="Racing Cars Site" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="d:\inetpub\wwwroot\racing" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:" />
</bindings>
</site>
Erstellen eines neuen Anwendungspools
Der folgende Code ändert die vorhandene "Racing Cars Site" und ändert den Namen und den physischen Pfad unter d:\inetput\wwwroot\racing. Außerdem wird ein neuer Anwendungspool erstellt, einige Eigenschaften definiert, die Rennwebsite so festgelegt, dass dieser Pool verwendet und schließlich wiederverwendet wird.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";
site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();
}
}
}
Anstatt die Website zu indizieren, können Sie ein Websiteobjekt instanziieren und den Verweis darauf festlegen. Nachdem der Verweis festgelegt wurde, können Sie die Methoden für das Websiteobjekt aufrufen, in diesem Fall name, um die Website direkt umzubenennen.
Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";
Hier sehen Sie eine weitere Verwendung der Indexer, um die Stammanwendung und dann das Stammverzeichnis abzurufen und den physischen Pfad darauf festzulegen.
site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
Neben dem Websiteobjekt verfügen wir über das Anwendungspoolobjekt, das eine bequeme Möglichkeit zum Abrufen und Festlegen von Konfigurationseigenschaften bietet, sowie auf Zustandsmethoden und -daten reagieren. Es wird ein neuer Anwendungspool erstellt, und dann wird sofort der Standort in diesem Anwendungspool platziert.
serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
Wie das Server-Manager-Websiteobjekt können Sie mit dem Server-Manager-Anwendungspoolobjekt das Anwendungspoolobjekt erstellen und den Verweis darauf festlegen. Sie können auch Eigenschaften abrufen und festlegen und Methoden aufrufen.
Sobald die Konfigurationsdaten des Anwendungspools über den Aktualisierungsaufruf in die Datei serialisiert wurden, können Sie die Wiederverwendungsmethode darauf ausführen. Dieser Wiederverwendungsaufruf ist nicht erforderlich, da der Anwendungspool einfach erstellt wird und es keine Notwendigkeit gibt. Dies veranschaulicht jedoch, dass Aktionen in Objekten ausgeführt werden können, die erst erstellt wurden, nachdem sie auf den Datenträger serialisiert wurden, und der Server kann diese Konfiguration abrufen und darauf reagieren.
ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();
Durch Ausführen des obigen Codes wird die folgende Ausgabe in applicationHost.config innerhalb des Abschnitts generiert. Anstatt den XML-Code direkt zu bearbeiten und auf Element- und Attributebene zu arbeiten, bietet die Verwendung der Server-Manager-Objekte eine bequeme Möglichkeit zum Verwalten des Webservers.
<site name="Racing Site" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="d:\racing" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":8080:" />
</bindings>
</site>
Außerdem werden die folgenden Änderungen am Abschnitt vorgenommen:
<add name="RacingApplicationPool" managedPipelineMode="ISAPI" />
Festlegen der Konfiguration im Stammverzeichnis der Website in der Datei web.config
Der folgende Code legt das Attribut "enabled" des Abschnitts auf "false" für die Website "Standardwebsite" fest.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Configuration config =
mgr.GetWebConfiguration("Default Web Site");
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;
serverManager.CommitChanges();
}
}
}
Die Konfiguration ist eine Klasse, die Zugriff auf Konfigurationsabschnitte im System bietet. Basierend auf den verschiedenen Aufrufen zum Abrufen der Konfiguration können Sie auf applicationHost.config, web.config, administration.config oder eine andere Konfigurationsdatei zugreifen. Der GetWebConfiguration-Aufruf ruft speziell eine web.config-Datei für die angegebene Website – Default Web Site – und den spezifischen Pfad – Root – ab.
Configuration config = serverManager.GetWebConfiguration("Default Web Site");
Sobald die web.config Datei abgerufen wurde (sofern sie nicht vorhanden ist, wird erstellt), wird der Aufruf zum Abrufen eines Abschnitts ausgeführt. Wir suchen nach dem Abschnitt, um ihn zu deaktivieren. Auch wenn die web.config Datei nicht vorhanden ist (oder wenn sie vorhanden ist, aber kein Abschnittssatz explizit festgelegt ist), wird weiterhin eine effektive Konfiguration auf die Standortebene angewendet. Dies ist die Konfiguration, die außer Kraft gesetzt wird.
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
Mithilfe von Methoden für das Abschnittsobjekt können Sie das aktivierte Attribut abrufen und dann seinen Wert über die Wertmethode festlegen. Erst nach dem Aufruf der Commit-Änderungsmethode im Server-Manager werden die Änderungen serialisiert und auf dem Datenträger beibehalten und sofort vom Server aufgenommen. Wenn mehrere Instanzen von Konfigurationsobjekten vorhanden sind, werden durch Aufrufen von Commitänderungen im Server-Manager alle Objekte auf dem Datenträger gespeichert.
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;
serverManager.CommitChanges();
Eine weitere Option zum Abrufen und Festlegen von Attributinformationen aus einem Abschnitt ist die Verwendung von Indexern. Die folgende Codezeile kann verwendet werden, nachdem das Abschnittsobjekt abgerufen wurde, um den wert des aktivierten Attributs festzulegen.
section["enabled"] = true;
Das Endergebnis ist die in der web.config-Datei der angegebenen Website festgelegte Konfiguration.
Festlegen der Konfiguration für einen Standort in applicationHost.config
Der folgende Code legt das Attribut "enabled" des Abschnitts auf "false" für die Website "Standardwebsite" fest.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
class Program
{
static void Main(string[] args)
{
ServerManager serverManager = new ServerManager();
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection section = config.GetSection("system.webServer/defaultDocument","Default Web Site");
ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = false;
serverManager.CommitChanges();
}
}
}
Dieser Code ist effektiv mit dem vorherigen Vorgang identisch; Der einzige Unterschied ist der Konfigurations-Manager-Aufruf, um die applicationHost.config Datei über GetApplicationHostconfiguration abzurufen.
Hinweis
Der Aufruf von "Get Section" ist derjenige, der sowohl den zu lesenden und/oder zu ändernden Abschnitt als auch den Speicherortpfad dafür angibt.
Configuration config = serverManager.GetApplicationHostConfiguration();
Das Endergebnis ist eine Konfiguration in der Datei applicationHost.config, die auf die Website anwendbar ist, die über einen location-Tag angegeben wird.