Compartir a través de


Cómo usar Microsoft.Web.Administration

de Saad Ladki

Introducción

IIS 7.0 y versiones superiores proporcionan una interfaz completa de programación de aplicaciones (API) de administración de código administrado, que permite la manipulación íntegra de los archivos de configuración XML y un acceso oportuno a los objetos de servidor. En este documento se le orienta con el uso de la nueva API de administración para modificar la configuración del servidor y administrar objetos del servidor.

IIS incluye Microsoft.Web.Administration, que es una nueva API de administración para el servidor web que permite editar la configuración mediante la manipulación completa de los archivos de configuración XML. También proporciona objetos oportunos para administrar el servidor, sus propiedades y estado. El aspecto de edición de configuración de la API proporciona acceso mediante programación a las propiedades de configuración de lectura y escritura en la jerarquía de archivos de configuración de IIS y archivos de configuración específicos. El aspecto de administración de objetos de esta API proporciona una serie de objetos de administración de nivel superior para la administración directa del servidor (es decir, sitios, grupos de aplicaciones, procesos de trabajo, etc.).

Las clases de administración residen en el espacio de nombres de Microsoft.Web.Administration. Las clases proporcionan una interfaz débilmente tipada para acceder a secciones de configuración y objetos oportunos con propiedades y métodos que representan atributos de la configuración (como la ruta de acceso de un directorio virtual) o acciones que se hacen en el objeto (como reciclar un grupo de aplicaciones).

Creación de un nuevo sitio

El código siguiente crea un sitio titulado "Racing Cars Site" con su aplicación raíz y el directorio virtual raíz. También establece el sitio para que use el protocolo HTTP en el puerto 80 y define la ruta de acceso física como d:\inetput\wwwroot\racing.

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

ServerManager es la clase de serie que contiene un conjunto de objetos oportunos de servidor para los que están disponibles propiedades y métodos para su uso de forma fuertemente tipada. Es el punto de entrada principal para administrar el servidor. La administración del servidor se pudo haber hecho a través de otras rutas complicadas (acceso a XML de configuración sin procesar o a las API de estado de llamada), pero a través de estos objetos, la administración del servidor se hace sin problemas. El conjunto de objetos más comunes está disponible para su uso a través del administrador del servidor: aplicaciones, directorios virtuales, sitios, procesos de trabajo y dominios de aplicación.

ServerManager serverManager = new ServerManager();

El objeto de sitios permite el acceso a las aplicaciones y propiedades de los sitios. También contiene métodos para agregar un sitio al sistema o obtener el recuento total de sitios. El método agregar también define el nombre del sitio, la ruta de acceso del directorio virtual raíz y el número de puerto con un número entero. Tenga en cuenta también que se crea una instancia de esa llamada como un objeto de Site, mySite, con el que se puede trabajar en el sitio recién creado modificando sus propiedades directamente.

Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing",  8080);

Los objetos oportunos facilitan la modificación de las propiedades. Al obtener acceso a las propiedades desde el objeto mySite, se puede establecer la propiedad de inicio automático del sitio en "true" directamente sin conocer ningún atributo XML ni conceptos de elemento específicos.

mySite.ServerAutoStart = true;

Además, una ruta diferente que podría haberse tomado para modificar la propiedad de inicio automático es no crear instancias de un objeto de sitio. En su lugar, capture el sitio una vez creado y modifique sus propiedades directamente. El objeto de administración usa el concepto de indexadores para buscar objetos específicos por claves como nombre o índice sin tener que incurrir en llamadas costosas para enumerar todo el conjunto de objetos. Al definir el nombre, puede obtener el objeto específico y trabajar con él.

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

Para actualizar, la llamada a los cambios de confirmación ejecuta la transacción para serializar la configuración, si alguna ha cambiado, al disco.

serverManager.CommitChanges();

La ejecución del código anterior genera la siguiente salida en la applicationHost.config dentro de la sección. En lugar de manipular el XML directamente y trabajar en el nivel de elemento y atributo, el uso de los objetos del administrador del servidor proporciona una manera cómoda de administrar el servidor web.

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

Creación de un nuevo grupo de aplicaciones

El código siguiente modifica el sitio "Racing Cars Site" existente y cambia su nombre y la ruta de acceso física en d:\inetput\wwwroot\racing. También crea un nuevo grupo de aplicaciones, define algunas propiedades, establece el sitio de carreras para usar este grupo y, por último, lo recicla.

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

En lugar de indexar para capturar el sitio, puede crear instancias de un objeto de sitio y establecer la referencia a él. Una vez establecida la referencia, puede llamar a los métodos para el objeto de sitio, en este caso name, para cambiar el nombre del sitio directamente.

Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";

Este es otro uso de los indexadores para obtener la aplicación raíz y luego el directorio raíz y establecer la ruta de acceso física en él.

site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";

Además del objeto de sitio, tenemos el objeto de grupo de aplicaciones que proporciona una manera cómoda de obtener y establecer propiedades de configuración, así como actuar sobre los métodos de estado y los datos. Se crea un nuevo grupo de aplicaciones y después se coloca inmediatamente el sitio en ese grupo de aplicaciones.

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

Al igual que el objeto de sitio del administrador de servidores, el objeto de grupo de aplicaciones del administrador de servidores permite crear el objeto del grupo de aplicaciones y establecer la referencia a él. También puede obtener y establecer propiedades y llamar a métodos.

Una vez que los datos de configuración del grupo de aplicaciones se serializan en el archivo a través de la llamada de actualización, puede ejecutar en él el método de reciclaje. Esta llamada de reciclaje no es necesaria, ya que el grupo de aplicaciones simplemente se creará y no es necesario. Pero esto ilustra que la acción se puede hacer en objetos que se han creado solo después de serializarse en el disco y el servidor puede capturar esta configuración y actuar sobre él.

ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();

La ejecución del código anterior genera la siguiente salida en la applicationHost.config dentro de la sección. En lugar de manipular el XML directamente y trabajar en el nivel de elemento y atributo, el uso de los objetos del administrador del servidor proporciona una manera cómoda de administrar el servidor web.

<site name="Racing Site" id="2" serverAutoStart="true"> 
    <application path="/"> 
        <virtualDirectory path="/" physicalPath="d:\racing" /> 
    </application> 
    <bindings> 
        <binding protocol="http" bindingInformation=":8080:" /> 
    </bindings> 
</site>

Además, los siguientes cambios se producen en la sección :

<add name="RacingApplicationPool" managedPipelineMode="ISAPI" />

Establecimiento de la configuración en web.config de raíz del sitio

El código siguiente establece el atributo "enabled" de la sección en false para el sitio "Sitio web predeterminado".

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

La configuración es una clase que proporciona acceso a las secciones de configuración del sistema. En función de las diferentes llamadas para obtener la configuración, puede acceder a applicationHost.config, web.config, administration.config o cualquier otro archivo de configuración. La llamada GetWebConfiguration obtiene específicamente un archivo web.config para el sitio dado (sitio web predeterminado) y la ruta raíz específica.

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

Una vez adquirido el archivo web.config (si no existe, se crea), se hace la llamada para obtener una sección. Buscamos la sección para deshabilitarla. Incluso si el archivo web.config no existe (o si existe, pero no hay ningún conjunto de secciones explícitamente), todavía hay una configuración efectiva aplicada al nivel de sitio. Esta es la configuración que se reemplazará.

ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");

Mediante el uso de métodos en el objeto sección, puede obtener el atributo habilitado y luego establecer su valor a través del método valor. Solo después de llamar al método de confirmación de cambios en el administrador del servidor, los cambios se serializarán y conservarán en el disco y se recogerán inmediatamente en el servidor. Si hay varias instancias de objetos de configuración, al llamar a los cambios de confirmación en el administrador del servidor se conservarán todos los objetos en el disco.

ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;    
serverManager.CommitChanges();

Otra opción para obtener y establecer información de atributo de una sección es mediante el uso de indizadores. Se puede usar la siguiente línea de código después de obtener el objeto de sección para establecer el valor del atributo habilitado.

section["enabled"] = true;

El resultado final es la configuración establecida en el archivo web.config del sitio especificado.

Establecimiento de la configuración de un sitio en applicationHost.config

El código siguiente establece el atributo "enabled" de la sección en false para el sitio "Sitio web predeterminado".

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

Este código es eficazmente el mismo que la tarea anterior; la única diferencia es la llamada de Configuration Manager para obtener el archivo applicationHost.config a través de GetApplicationHostconfiguration.

Nota:

La llamada a la sección get es la que especifica la sección que se leerá o modificará, así como la ruta de acceso de ubicación para ella.

Configuration config = serverManager.GetApplicationHostConfiguration();

El resultado final es la configuración establecida en el archivo applicationHost.config aplicable al sitio especificado a través de una etiqueta de ubicación.