Compartir a través de


Creación de un módulo de administrador de IIS simple

de Carlos Aguilar Mares

La nueva herramienta de administración web de IIS 7.0 y versiones posteriores es una plataforma para desarrolladores extensible. Empresas de terceros pueden desarrollar e instalar sus propias características de administración, las cuales aparecerán como características de primera clase en la herramienta. Las tareas que se muestran en este artículo incluyen:

  • Creación del proyecto en Microsoft Visual Studio o Microsoft Visual C# Express para que la biblioteca se pueda usar dentro de lnetMgr
  • Creación de un proveedor de módulos simple
  • Creación de un módulo sencillo que muestre un cuadro de mensaje.

Tarea 1: Creación del proyecto

Para crear un módulo de extensibilidad para InetMgr, debe crear un proyecto DLL, también conocido como proyecto de biblioteca de clases. Este archivo DLL debe tener un nombre seguro para que se pueda registrar en la GAC (caché global de ensamblados) ya que es un requisito para los módulos que InetMgr usa.

  1. Haga clic en Inicio, haga clic en Programas y ejecute Microsoft Visual Studio 2005 o Microsoft Visual C# 2005 Express Edition.

  2. En el menú Archivo, seleccione la opción Nuevo proyecto.

  3. En el cuadro de diálogo Nuevo proyecto, seleccione Biblioteca de clases como tipo de proyecto y escriba ExtensibilityDemo como nombre del proyecto. Haga clic en OK.

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

  4. Elimine el archivo Class1.cs agregado de manera predeterminada (ya que no lo va a usar) mediante la opción Eliminar del menú contextual del Explorador de soluciones.

  5. Con la opción Agregar referencia... del menú Proyecto, agregue una referencia a Microsoft.Web.Management.dll mediante la pestaña Examinar y búsquela en el directorio \Windows\system32\inetsrv. Este es el archivo DLL que contiene todas las clases de extensibilidad necesarias para crear módulos para InetMgr.

    Dado que usaremos código para crear la interfaz de usuario basada en WinForms, también debemos agregar una referencia a System.Windows.Forms.dll; para ello, use de nuevo la opción Agregar referencia... del menú Proyecto y seleccione System.Windows.Forms.dll en la lista de ensamblados .NET.

    Uno de los requisitos para que las bibliotecas se usen en InetMgr es que deben registrarse dentro de la GAC. Asegúrese de que el archivo DLL tiene un nombre seguro (a veces denominado Firmado). Visual Studio ofrece una manera fácil de crear nombres. Use el menú Proyecto, seleccione la opción Propiedades de ExtensibilityDemo.

  6. En la pestaña Firma, active la casilla Firmar el ensamblado.

  7. En el cuadro combinado, seleccione la opción <Nuevo...> para crear una clave. En el cuadro de diálogo Crear clave de nombre seguro, escriba DemoKey.snk como nombre de la clave y desactive la casilla Proteger mi archivo de clave con una contraseña. Haga clic en OK.

    Screenshot of the Create Strong Name Key dialog.

    La pestaña de firma debe aparecer de la siguiente manera:

    Screenshot of the signing tab.

    Dado que queremos que el ensamblado esté en la GAC, agregaremos algunos eventos posteriores a la compilación para que el ensamblado se agregue automáticamente a la GAC cada vez que se compile. Esto facilita la depuración, así como la realización de cambios a medida que agregamos nuevas funcionalidades.

  8. Seleccione la pestaña Eventos de compilación y agregue la siguiente línea de comandos de Evento posterior a la compilación:

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

    Screenshot of the Build Events tab.

    (Opcional) Si usa Microsoft Visual Studio 2005, configure la depuración correctamente para que pueda usar F5 para ejecutar el código. En las propiedades del proyecto, seleccione la pestaña Depurar y establezca la configuración para que se inicie un programa externo seleccionando \windows\system32\inetsrv\inetmgr.exe.

    Screenshot of the debug tab.

  9. Cierre las propiedades del proyecto y seleccione la opción Guardar todo en el menú Archivo y establezca la ubicación en d:\Demos. Haga clic en Save(Guardar).

    Screenshot of the Save Project dialog.

    Ahora puede compilar el proyecto mediante Compilar solución en el menú Compilar. Esto compila automáticamente el archivo DLL y lo agrega a la GAC.

    Nota:

    Si el comando para establecer vsvars32.bat no funciona y se genera un código de error 9009, reemplace el comando agregado en los eventos posteriores a la compilación del paso 8. Para ello, agregue la ruta de acceso completa a gacutil.exe, por ejemplo:

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

Tarea 2: Creación de un proveedor de módulos

En esta tarea, puede crear un proveedor de módulos; este es el punto de entrada principal para el registro de módulos en InetMgr. Estos proveedores de módulos se enumeran en Administration.config.

  1. Seleccione la opción Agregar nuevo elemento en el menú Proyecto. En el cuadro de diálogo Agregar nuevo elemento, seleccione la plantilla Clase y escriba DemoModuleProvider.cs como nombre del archivo.

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

  2. Cambie el código para que tenga el siguiente aspecto:

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

Este código crea un ModuleProvider que admite todos los tipos de conexiones (servidor, sitio y aplicación) y registra un módulo del lado cliente denominado DemoModule.

Tarea 3: Creación de un módulo

En esta tarea, aprenderá a crear un módulo. Un módulo es el punto de entrada principal del cliente para todos los objetos de extensibilidad. Tiene un método principal denominado Inicializar. Es el método donde se produce toda la acción.

  1. Seleccione la opción Agregar nuevo elemento en el menú Proyecto. Seleccione la plantilla Clase y escriba DemoModule.cs como nombre de archivo.

  2. Cambie el código para que tenga el siguiente aspecto:

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

Tarea 4: Probar el módulo

En esta tarea, agregará el nuevo módulo que ha compilado. Para ello, debemos agregarlo al archivo administration.config de la lista moduleProviders.

En primer lugar, debemos averiguar el nombre completo del ensamblado que acabamos de crear. Tiene este formato: "ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey}". Use el Explorador de Windows para encontrarlo.

  1. Abra el Explorador de Windows y vaya hasta la carpeta *Windows\Assembly*.

  2. Busque ExtensibilityDemo en la lista de ensamblados y haga clic con el botón derecho en él y seleccione propiedades. En el cuadro de diálogo, verá un campo denominado Token de clave pública. Necesitamos este valor para registrarlo en InetMgr, así que cópielo en el Portapapeles.

    Screenshot of the Extensibility Demo Properties dialog.

  3. De nuevo en Microsoft Visual C# 2005 Express, seleccione la opción Abrir archivo… en el menú Archivo. Busque el archivo \Windows\System32\InetSrv\Administration.config.

  4. Busque la sección <moduleProviders> y agregue lo siguiente, pero asegúrese de reemplazar el token de clave pública por el que copiamos en el paso 2:

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

    Nota:

    Al agregarlo solo a la lista de moduleProviders, solo se registra el módulo para las conexiones de servidor. Si desea que este módulo esté habilitado para conexiones de sitio, así como conexiones de aplicación, agréguelo a la siguiente lista:

    <location path=".">
      <module>
        <add name="ExtensibilityDemo" />
    </location>
    
  5. Guarde el archivo y ejecute InetMgr, conéctese a localhost y verá el mensaje siguiente:

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

Resumen

En este artículo se explica cómo crear un proyecto de Visual Studio para desarrollar módulos de extensibilidad para la nueva herramienta de administración de IIS. Hemos creado un ModuleProvider sencillo y su homólogo Module para mostrar un mensaje.

Ahora que comprende los conceptos básicos de la creación de módulos de la herramienta de administración de IIS, puede explorar las características más interesantes que están disponibles para la extensibilidad.