Freigeben über


Erstellen eines einfachen IIS-Manager-Moduls

von Carlos Aguilar Mares

Das neue Webverwaltungstool IIS 7.0 und höher ist eine erweiterbare Entwicklerplattform. Drittanbieter können eigene Verwaltungsfunktionen entwickeln und installieren, die als erstklassige Features im Tool erscheinen. Die in diesem Artikel veranschaulichten Aufgaben umfassen:

  • Erstellen des Projekts in Microsoft Visual Studio oder Microsoft Visual C# Express, sodass die Bibliothek in InetMgr verwendet werden kann
  • Erstellen eines einfachen Modulanbieters
  • Erstellen eines einfachen Moduls, das ein Meldungsfeld anzeigt

Aufgabe 1: Erstellen des Projekts

Zum Erstellen eines Erweiterbarkeitsmoduls für InetMgr müssen Sie ein DLL-Projekt (auch als Klassenbibliotheksprojekt bezeichnet) erstellen. Diese DLL benötigt einen starken Namen, damit sie im globalen Assemblycache (Global Assembly Cache, GAC) registriert werden kann. Dies ist eine Anforderung für Module, die von der InetMgr verwendet werden.

  1. Klicken Sie erst auf Start, dann auf Programme, und führen Sie schließlich Microsoft Visual Studio 2005 oder Microsoft Visual C# 2005 Express Edition aus.

  2. Wählen Sie im Menü „Datei“ die Option Neues Projekt aus.

  3. Wählen Sie im Dialogfeld Neues Projekt als Projekttyp Klassenbibliothek aus, und geben Sie ExtensibilityDemo als Namen des Projekts ein. Klicken Sie auf OK.

    Screenshot of the New Project window. The Class Library icon is selected.

  4. Entfernen Sie die Datei „Class1.cs“, die standardmäßig hinzugefügt wird (da wir diese Datei nicht verwenden), indem Sie im Projektmappen-Explorer im Kontextmenü die Option „Löschen“ verwenden.

  5. Fügen Sie mithilfe der Option Neue Referenz hinzufügen im Menü „Projekt“ einen Verweis auf Microsoft.Web.Management.dll hinzu, indem Sie die Registerkarte „Suchen“ verwenden und die DLL im Verzeichnis \Windows\system32\inetsrv suchen. Dies ist die DLL, die alle Erweiterungsklassen enthält, die zum Erstellen von Modulen für die InetMgr erforderlich sind.

    Da wir Code zum Erstellen von auf WinForms basierenden Benutzeroberflächen verwenden, müssen wir einen Verweis auf „System.Windows.Forms.dll“ hinzufügen. Verwenden Sie hierzu im Menü „Projekt“ die Option Verweis hinzufügen..., und wählen Sie in der .NET-Liste der Assemblys System.Windows.Forms.dll aus.

    Einer der Anforderungen für Bibliotheken, die in InetMgr verwendet werden sollen, besteht darin, dass sie im GAC registriert werden müssen. Stellen Sie sicher, dass die DLL stark benannt ist (wird manchmal auch als „signiert“ bezeichnet). Visual Studio bietet eine einfache Möglichkeit zum Erstellen und Signieren neuer Namen. Wählen Sie im Menü „Projekt“ die Option ExtensibilityDemo-Eigenschaften aus.

  6. Aktivieren Sie auf der Registerkarte Signieren das Kontrollkästchen Assembly signieren.

  7. Wählen Sie im Kombinationsfeld die Option <Neu...> aus, um einen neuen Schlüssel zu erstellen. Geben Sie im Dialogfeld Schlüssel mit starkem Namen erstellen den Namen DemoKey.snk ein und deaktivieren Sie das Kontrollkästchen Meine Schlüsseldatei mit einem Kennwort schützen. Klicken Sie auf OK.

    Screenshot of the Create Strong Name Key dialog.

    Die Registerkarte "Signieren" sollte wie folgt angezeigt werden:

    Screenshot of the signing tab.

    Da die Assembly im GAC sein soll, fügen wir einige Postbuildereignisse hinzu, damit die Assembly bei jeder Kompilierung automatisch zum GAC hinzugefügt wird. Dies erleichtert beim Hinzufügen neuer Funktionen das Debuggen und das Vornehmen von Änderungen.

  8. Wählen Sie die RegisterkarteBuildereignisse aus, und fügen Sie die folgende Befehlszeile für das Postbuildereignis hinzu:

    CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL
    gacutil.exe /if "$(TargetPath)"
    

    Screenshot of the Build Events tab.

    (Optional) Wenn Sie Microsoft Visual Studio 2005 verwenden, richten Sie das Debuggen ordnungsgemäß ein, damit Sie F5 zum Ausführen des Codes verwenden können. Wählen Sie in den Projekteigenschaften die Registerkarte Debuggen aus, und legen Sie fest, dass ein externes Programm gestartet wird, wobei Sie \windows\system32\inetsrv\inetmgr.exe auswählen.

    Screenshot of the debug tab.

  9. Schließen Sie die Projekteigenschaften, und wählen Sie die Option Alle speichern im Menü "Datei" aus. Legen Sie dann als Speicherort „d:\Demos“ fest. Klicken Sie auf Speichern.

    Screenshot of the Save Project dialog.

    Sie können das Projekt nun kompilieren, indem Sie im Menü „Erstellen“ Projektmappe erstellen verwenden. Dadurch wird die DLL automatisch erstellt und zum GAC hinzugefügt.

    Hinweis

    Wenn der Befehl zum Festlegen von „vsvars32.bat“ nicht funktioniert und den Fehlercode 9009 zurückgibt, ersetzen Sie den in Schritt 8 hinzugefügten Befehl, indem Sie den vollständigen Pfad zu „gacutil.exe“ hinzufügen, z. B.:

    "D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "$(TargetPath)"
    

Aufgabe 2: Erstellen eines Modulanbieters

In dieser Aufgabe erstellen Sie einen Modulanbieter. Er ist der Haupteinstiegspunkt für die Registrierung von Modulen in InetMgr. Diese Modulanbieter werden in „Administration.config“ aufgeführt.

  1. Wählen Sie im Menü „Projekt“ die Option Neues Element hinzufügen aus. Wählen Sie im Dialogfeld „Neues Element hinzufügen“ die Vorlage „Klasse“ aus, und geben Sie als Namen für die Datei DemoModuleProvider.cs ein.

    Screenshot of the Add New Item window. The Class icon is highlighted.

  2. Ändern Sie den Code so, dass er wie folgt aussieht:

    using System;
    using System.Security;
    using Microsoft.Web.Management.Server;
    namespace ExtensibilityDemo {
        class DemoModuleProvider : ModuleProvider {
            public override Type ServiceType {
                get { return null; }
            }
            public override ModuleDefinition GetModuleDefinition(IManagementContext context) {
                return new ModuleDefinition(Name, typeof(DemoModule).AssemblyQualifiedName);
            }
            public override bool SupportsScope(ManagementScope scope) {
                return true;
            }
        }
    }
    

Dieser Code erstellt einen ModuleProvider, der alle Typen von Verbindungen (Server, Website und Anwendung) unterstützt und ein clientseitiges Modul namens DemoModule registriert.

Aufgabe 3: Erstellen eines Moduls

In dieser Aufgabe erfahren Sie, wie Sie ein Modul erstellen. Ein Modul ist der Haupteinstiegspunkt im Client für alle Erweiterbarkeitsobjekte. Es verfügt über eine Hauptmethode namens „Initialisieren“. Dies ist die Methode, in der alle Aktionen auftreten.

  1. Wählen Sie im Menü „Projekt“ die Option „Neues Element hinzufügen“ aus. Wählen Sie die Vorlage „Klasse“ aus, und geben Sie als Dateinamen „DemoModule.cs“ ein.

  2. Ändern Sie den Code so, dass er wie folgt aussieht:

    using System;
    using System.Windows.Forms;
    using Microsoft.Web.Management.Client;
    using Microsoft.Web.Management.Server;
    
    namespace ExtensibilityDemo {
        internal class DemoModule : Module {
            protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) {
                base.Initialize(serviceProvider, moduleInfo);
                 MessageBox.Show("Hello World Inside InetMgr");
            }
        }
    }
    

Aufgabe 4: Testen des Moduls

In dieser Aufgabe fügen Sie das neue Modul hinzu, das Sie erstellt haben. Dazu müssen wir sie zur Datei „administration.config“ in der Liste „moduleProviders“ hinzufügen.

Zunächst müssen wir den vollständigen Namen für die soeben erstellte Assembly ermitteln. Sie hat die Form „ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey}“. Verwenden Sie den Windows-Explorer, um sie zu finden.

  1. Öffnen Sie den Windows Explorer, und navigieren Sie zum Ordner *Windows\Assembly*.

  2. Suchen Sie in der Liste der Assemblys nach „ExtensibilityDemo“, klicken Sie mit der rechten Maustaste darauf, und wählen Sie Eigenschaften aus. Im Dialogfeld wird ein Feld mit dem Namen „Public Key Token“ (öffentliches Schlüsseltoken) angezeigt. Wir benötigen diesen Wert, um ihn bei InetMgr zu registrieren. Kopieren Sie ihn daher in die Zwischenablage.

    Screenshot of the Extensibility Demo Properties dialog.

  3. Wählen Sie zurück in Microsoft Visual C# 2005 Express die Option „Datei öffnen...“ im Menü "Datei" aus. Suchen Sie nach der Datei „\Windows\System32\InetSrv\Administration.config“.

  4. Suchen Sie nach dem Abschnitt <moduleProviders>, und fügen Sie Folgendes hinzu, wobei Sie jedoch sicherstellen, dass Sie das öffentliche Schlüsseltoken durch das in Schritt 2 kopierte ersetzen:

    <moduleProviders>
      <add name="ExtensibilityDemo" type="ExtensibilityDemo.DemoModuleProvider, ExtensibilityDemo, 
                              Version=1.0.0.0, Culture=neutral, PublicKeyToken=bed679b1975c7f97" />
    <moduleProviders>
    

    Hinweis

    Indem Sie es nur der Liste „moduleProviders“ hinzufügen, registrieren Sie das Modul nur für Serververbindungen. Wenn dieses Modul für Website- und Anwendungsverbindungen aktiviert werden soll, fügen Sie es der folgenden Liste hinzu:

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. Speichern Sie die Datei, und führen Sie InetMgr aus. Wenn Sie eine Verbindung mit localhost herstellen, wird die folgende Meldung angezeigt:

    Screenshot of the I I S start page showing the example message dialog.

Zusammenfassung

In diesem Artikel wurde erläutert, wie Sie ein Visual Studio-Projekt erstellen, um Erweiterungsmodule für das neue IIS-Verwaltungstool zu entwickeln. Wir haben einen einfachen ModuleProvider und sein entsprechendes Modul erstellt, um eine Meldung anzuzeigen.

Nachdem Sie nun die Grundlagen des Erstellens von IIS-Verwaltungstoolmodulen verstehen, können Sie interessantere Funktionen erkunden, die für die Erweiterbarkeit verfügbar sind.