Guide pratique pour créer un module gestionnaire IIS simple

par Carlos Aguilar Mares

Le nouvel outil de gestion web IIS 7.0 et versions ultérieures est une plateforme de développement extensible. Les tiers peuvent développer et installer leurs propres fonctionnalités de gestion qui apparaissent en tant que fonctionnalités de première classe dans l’outil. Les tâches illustrées dans cet article sont les suivantes :

  • Création du projet dans Microsoft Visual Studio ou Microsoft Visual C# Express afin que la bibliothèque puisse être utilisée dans InetMgr
  • Création d’un fournisseur de module simple
  • Création d’un module simple qui affiche une boîte de message.

Tâche 1 : Création du projet

Pour créer un module d’extensibilité pour InetMgr, vous devez créer un projet DLL également appelé projet bibliothèque de classes. Cette DLL doit être fortement nommée afin qu’elle puisse être inscrite dans le GAC (Global Assembly Cache), qui est une exigence pour les modules utilisés par InetMgr.

  1. Cliquez sur Démarrer, cliquez sur Programmes et exécutez Microsoft Visual Studio 2005 ou Microsoft Visual C# 2005 Express Edition

  2. Dans le menu Fichier , sélectionnez l’option Nouveau projet.

  3. Dans la boîte de dialogue Nouveau projet , sélectionnez Bibliothèque de classes comme type de projet et tapez ExtensibilityDemo comme nom du projet. Cliquez sur OK.

    Capture d’écran de la fenêtre Nouveau projet. L’icône Bibliothèque de classes est sélectionnée.

  4. Supprimez le fichier Class1.cs ajouté par défaut (car nous n’utiliserons pas ce fichier) à l’aide de l’option Supprimer du menu contextuel dans l’Explorateur de solutions.

  5. À l’aide de l’option Ajouter une référence... dans le menu Projet, ajoutez une référence à Microsoft.Web.Management.dll à l’aide de l’onglet Parcourir et recherchez-la dans le répertoire \Windows\system32\inetsrv . Il s’agit de la DLL qui contient toutes les classes d’extensibilité nécessaires pour la création de modules pour InetMgr.

    Étant donné que nous utilisons du code pour créer une interface utilisateur basée sur WinForms, nous devons ajouter une référence à System.Windows.Forms.dll; pour cela, utilisez l’option Ajouter une référence... dans le menu Projet et sélectionnez System.Windows.Forms.dll dans the.NET liste d’assemblys.

    L’une des conditions requises pour les bibliothèques utilisées dans InetMgr est qu’elles doivent être inscrites dans le GAC. Vérifiez que la DLL est fortement nommée (parfois appelée Signature). Visual Studio offre un moyen simple de créer et de gérer des nouveaux noms. Utilisez le menu Projet pour sélectionner l’option ExtensibilityDemo Properties.

  6. Sous l’onglet Signature , cochez la case Signer le module d'assemblage.

  7. Dans la zone de liste déroulante, sélectionnez l’option <Nouveau...> pour créer une clé. Dans la boîte de dialogue Créer une clé de nom fort , tapez DemoKey.snk comme nom de la clé et décochez la case Protéger mon fichier de clé avec une case à cocher mot de passe . Cliquez sur OK.

    Capture d’écran de la boîte de dialogue Créer une clé de nom fort.

    L’onglet de signature doit s’afficher comme suit :

    Capture d’écran de l’onglet signature.

    Étant donné que nous voulons que l’assembly se trouve dans le GAC, nous ajoutons des événements post-build afin que l’assembly soit automatiquement ajouté au GAC chaque fois que nous compileons. Cela facilite le débogage et apporte des modifications au fur et à mesure que nous ajoutons de nouvelles fonctionnalités.

  8. Sélectionnez l’onglet Événements de build et ajoutez la ligne de commande d’événement post-build suivante :

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

    Capture d’écran de l’onglet Événements de génération.

    (Facultatif) Si vous utilisez Microsoft Visual Studio 2005, configurez le débogage correctement pour pouvoir utiliser F5 pour exécuter le code. Dans les propriétés du projet, sélectionnez Onglet Débogage et définissez-le pour démarrer un programme externe en choisissant \windows\system32\inetsrv\inetmgr.exe.

    Capture d’écran de l’onglet débogage.

  9. Fermez les propriétés du projet et sélectionnez l’option Enregistrer tout dans le menu Fichier, puis définissez l’emplacement sur d :\Demos. Cliquez sur Enregistrer.

    Capture d’écran de la boîte de dialogue Enregistrer le projet.

    Vous pouvez maintenant compiler le projet à l’aide de build Solution sous le menu Générer. Cette opération génère automatiquement la DLL et l’ajoute au GAC.

    Note

    Si la commande permettant de définir vsvars32.bat ne fonctionne pas avec un code d’erreur 9009, remplacez la commande ajoutée à l’étape 8 des événements Post Build en ajoutant le chemin complet à gacutil.exe, par exemple :

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

Tâche 2 : Création d’un fournisseur de modules

Dans cette tâche, vous créez un fournisseur de modules ; il s’agit du point d’entrée principal pour l’inscription de modules dans InetMgr. Ces fournisseurs de modules sont répertoriés dans Administration.config.

  1. Sélectionnez l’option Ajouter un nouvel élément dans le menu Projet. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez le modèle de classe et tapez DemoModuleProvider.cs comme nom du fichier.

    Capture d’écran de la fenêtre Ajouter un nouvel élément. L’icône Classe est mise en surbrillance.

  2. Modifiez le code pour qu’il se présente comme suit :

    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;
            }
        }
    }
    

Ce code crée un ModuleProvider qui prend en charge tous les types de connexions (serveur, site et application) et inscrit un module côté client appelé DemoModule.

Tâche 3 : Création d’un module

Dans cette tâche, vous allez apprendre à créer un module. Un module est le point d’entrée principal du client pour tous les objets d’extensibilité. Il a une méthode principale appelée Initialize. Il s’agit de la méthode dans laquelle toutes les actions se produisent.

  1. Sélectionnez l’option Ajouter un nouvel élément dans le menu Projet. Sélectionnez le modèle de classe et tapez DemoModule.cs comme nom de fichier.

  2. Modifiez le code pour qu’il se présente comme suit :

    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");
            }
        }
    }
    

Tâche 4 : Test du module

Dans cette tâche, vous ajoutez le nouveau module que vous avez créé. Pour cela, nous devons l’ajouter au fichier administration.config dans la liste moduleProviders.

Tout d’abord, nous devons déterminer le nom complet de l’assembly que nous venons de créer. Il se présente sous la forme « ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey} ». Utilisez l’Explorateur Windows pour le trouver.

  1. Ouvrez l’Explorateur Windows et accédez au dossier *Windows\Assembly*.

  2. Recherchez ExtensibilityDemo dans la liste des assemblys et cliquez dessus avec le bouton droit, puis sélectionnez les propriétés. Dans la boîte de dialogue, un champ appelé Jeton de clé publique s’affiche ; nous avons besoin de cette valeur pour l’inscrire à InetMgr. Copiez-la donc dans le Presse-papiers.

    Capture d’écran de la boîte de dialogue Propriétés de démonstration d’extensibilité.

  3. De retour dans Microsoft Visual C# 2005 Express, sélectionnez l’option Ouvrir le fichier... sous Menu Fichier. Recherchez le fichier \Windows\System32\InetSrv\Administration.config.

  4. Recherchez la section <moduleProviders> et ajoutez les éléments suivants, mais veillez à remplacer le Public Key Token par celui que nous avons copié à l’étape 2 :

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

    Note

    En l'ajoutant uniquement à la liste des moduleProviders, vous n'inscrivez le module que pour les connexions serveur. Si vous souhaitez que ce module soit activé pour les connexions de site ainsi que pour les connexions d’application, ajoutez-le à la liste suivante :

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. Enregistrez le fichier et exécutez InetMgr, connectez-vous à localhost et le message suivant s’affiche :

    Capture d’écran de la page de démarrage I I S montrant l’exemple de boîte de dialogue de message.

Résumé

Cet article a expliqué comment créer un projet Visual Studio pour développer des modules d’extensibilité pour le nouvel outil de gestion IIS. Nous avons créé un ModuleProvider simple et son équivalent module pour afficher un message.

Maintenant que vous comprenez les principes de base de la création de modules d’outil de gestion IIS, vous pouvez explorer des fonctionnalités plus intéressantes disponibles pour l’extensibilité.