Freigeben über


So verwenden Sie Microsoft.Web.Administration

von Saad Ladki

Einführung

IIS 7.0 und höher bieten eine umfassende Programmierschnittstelle (API) für die Verwaltung von verwaltetem Code, die eine vollständige Manipulation der XML-Konfigurationsdateien und einen einfachen 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 Objekte zum gemütlicheren Verwalten des Servers, seiner Eigenschaften und des Zustands. Der Konfigurationsbearbeitungsaspekt der API bietet programmatischen Zugriff auf das Lesen und Schreiben von Konfigurationseigenschaften in der IIS-Konfigurationsdatei-Hierarchie und spezifischen Konfigurationsdateien. Der Objektverwaltungsaspekt dieser API bietet eine Reihe von Verwaltungsobjekten der obersten Ebene für die direkte Verwaltung des Servers (d. h. Sites, Anwendungspools, Arbeitsprozesse usw.).

Die Verwaltungsklassen befinden sich im Namespace Microsoft.Web.Administration. Die Klassen bieten eine schwach typisierte Schnittstelle für den Zugriff auf Konfigurationsabschnitte und Komfortobjekte mit Eigenschaften und Methoden, die Attribute der Konfiguration (wie den Pfad eines virtuellen Verzeichnisses) oder Aktionen für das Objekt (wie das Recycling eines Anwendungspools) darstellen.

Eine neue Site erstellen

Der folgende Code erstellt eine Site mit dem Titel „Racing Cars Site“ mit der Stammanwendung und dem virtuellen Stammverzeichnis. Außerdem wird die Site so festgelegt, dass das HTTP-Protokoll über Port 80 verwendet wird, und der physische Pfad unter d:\inetput\wwwroot\racing definiert ist.

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 eine Reihe von Server-Komfortobjekten enthält, deren Eigenschaften und Methoden zur Verwendung in einer stark typisierten Weise verfügbar sind. Es ist der Haupteinstiegspunkt für die Verwaltung des Servers. Die Verwaltung des Servers konnte auch über andere umständliche Wege erfolgen (Zugriff auf rohes Konfigurations-XML oder Aufruf von Status-APIs), aber durch diese Objekte ist die Verwaltung des Servers nahtlos. Die am häufigsten verwendeten Objekte stehen über den Server-Manager zur Verfügung und enthalten: Anwendungen, virtuelle Verzeichnisse, Sites, Arbeitsprozesse und Anwendungsdomänen.

ServerManager serverManager = new ServerManager();

Das Sites-Objekt ermöglicht den Zugriff auf die Eigenschaften und Anwendungen einer Site. Es enthält auch Methoden, um eine Site zum System hinzuzufügen oder die Gesamtanzahl von Sites abzurufen. Die Add-Methode definiert außerdem den Namen der Site, den Pfad des virtuellen Stammverzeichnisses und die Portnummer als Integer. Achten Sie außerdem darauf, dass dieser Aufruf als ein Site-Objekt, mySite, instanziiert wird, zu welchem wir dann auf die neu erstellte Site zugreifen können, indem wir ihre Eigenschaften direkt verä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 Site direkt auf „true“ festlegen, ohne bestimmte XML-Attribute oder Elementkonzepte zu kennen.

mySite.ServerAutoStart = true;

Außerdem kann die AutoStart-Eigenschaft auf einen anderen Weg geändert werden, indem kein Site-Objekt instanziiert wird. Rufen Sie stattdessen die Site ab, sobald sie erstellt wurde, und ändern Sie ihre Eigenschaften direkt. Das Verwaltungsobjekt verwendet das Konzept von Indexern, um nach bestimmten Objekten über Schlüsseln wie den Name oder Index zu suchen, ohne aufwändige Aufrufe zur Auflistung des gesamten Objektsatzes ausführen zu müssen. Durch Definieren des Namens kann man das spezifische Objekt abrufen und darauf agieren.

serverManager.Sites["Racing Cars Site"].ServerAutoStart = true;

Zum Aktualisieren führt der Commit-Änderungsaufruf die Transaktion aus, um die Konfiguration (bei Veränderungen) 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 komfortable 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>

Einen neuen Anwendungspool erstellen

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 Rennsite so festgelegt, dass dieser Pool verwendet wird 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();
        }
    }
}

Statt die Site zu indizieren, um sie abzurufen, können Sie ein Siteobjekt instanziieren und den Verweis darauf festlegen. Nachdem der Verweis festgelegt wurde, können Sie die Methoden für das Site-Objekt aufrufen, in diesem Fall „name“, um die Site 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 Site-Objekt verfügen wir über das Anwendungspoolobjekt, das eine komfortable Möglichkeit zum Abrufen und Festlegen von Konfigurationseigenschaften bietet, sowie zum Agieren auf Zustandsmethoden und -daten. Es wird ein neuer Anwendungspool erstellt, und dann wird die Site sofort in diesen Anwendungspool platziert.

serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";

Wie beim Server-Manager-Site-Objekt können Sie mit dem Server-Manager-Anwendungspoolobjekt das Anwendungspoolobjekt erstellen und den Verweis darauf festlegen. Sie können auch Eigenschaften sowohl abrufen, als auch 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 daher keine Notwendigkeit besteht. 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 dass der Server diese Konfiguration abrufen und auf sie reagieren kann.

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 komfortable 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 web.config des Site-Stamms

Der folgende Code legt das Attribut „enabled“ des Abschnitts auf „false“ für die Site „Default Web Site“ 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 beliebige andere Konfigurationsdatei zugreifen. Der Aufruf GetWebConfiguration ruft speziell eine Web.config-Datei für die angegebene Site – Default Web Site – und den spezifischen Pfad – den Stammpfad – ab.

Configuration config = serverManager.GetWebConfiguration("Default Web Site");

Sobald die Datei web.config abgerufen wurde (falls sie nicht vorhanden ist, wird sie erstellt), wird der Aufruf zum Abrufen eines Abschnitts ausgeführt. Wir suchen nach dem Abschnitt, um ihn zu deaktivieren. Auch wenn die Datei web.config nicht vorhanden ist (oder wenn sie vorhanden ist, jedoch kein Abschnittssatz explizit festgelegt ist), wird weiterhin eine effektive Konfiguration auf der Site-Ebene 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 Value-Methode festlegen. Erst nach dem Aufruf der Commit-Änderungsmethode im Server-Manager werden die Änderungen serialisiert, 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 eine eingerichtete Konfiguration in der web.config-Datei der angegebenen Site.

Festlegen der Konfiguration für eine Site in applicationHost.config

Der folgende Code legt das Attribut „enabled“ des Abschnitts auf „false“ für die Site „Default Web Site“ 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 gleicht praktisch der vorherigen Aufgabe; Der einzige Unterschied ist der Konfigurationsmanager-Aufruf, um die applicationHost.config-Datei über GetApplicationHostconfiguration abzurufen.

Hinweis

Der „get section“-Aufruf ist derjenige, der sowohl den Abschnitt angibt, der gelesen und/oder verändert wird, als auch den Speicherort dafür.

Configuration config = serverManager.GetApplicationHostConfiguration();

Das Endergebnis ist der Konfigurationssatz für die applicationHost.config-Datei, die auf die über einen Speicherort-Tag angegebene Site anwendbar ist.