Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El sistema de configuración de IIS 7.0 y versiones posteriores se basa en archivos XML distribuidos que contienen la configuración de IIS, ASP.NET y otros componentes; la flexibilidad en el sistema de configuración también permite establecer la configuración en varios niveles, incluidos en el servidor, el sitio y el nivel de aplicación. La configuración a nivel de sitio y aplicación coexiste junto con la configuración de ASP.NET en archivos web.config.
Un aspecto del nuevo sistema de configuración es la facilidad con la que se puede ampliar la configuración. Es posible, con solo unos pocos cambios sencillos, integrar secciones de configuración personalizadas directamente en el sistema de configuración y manipular estas opciones mediante las API de administración existentes. La configuración se extiende simplemente definiendo una nueva sección de configuración en un archivo de esquema XML que luego se coloca en el directorio de esquema de IIS %windir%\system32\inetsrv\config\schema. Por último, la nueva sección de configuración debe registrarse en el archivo de configuración global de IIS.
En este artículo se explica un ejemplo que usa la extensibilidad de configuración básica y algunos de los escenarios más avanzados. Aunque el ejemplo utilizado es artificioso, debe ser suficiente para demostrar el poder de la extensibilidad de configuración.
Prerrequisitos
Hay una serie de requisitos previos para este artículo. Entre ellas, las siguientes:
- Tener una instalación predeterminada de IIS 7.0 o superior. Si IIS no está instalado, instálelo abriendo el Administrador del servidor y agregando el rol servidor web (IIS).
- Asegúrese de que tiene instalado el SDK de .NET Framework. Si no tiene instalado el SDK, házlo desde https://www.microsoft.com/downloads
- Usar varias herramientas en el directorio bin del SDK. Usar la ventana de comandos del SDK en el menú Inicio o agregar el directorio bin a la ruta (por ejemplo,
%systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin). - Ejecutar todos los comandos desde un símbolo del sistema con privilegios elevados. Haga clic con el botón derecho en "Símbolo del sistema del SDK" (o "Símbolo del sistema") en el menú Inicio y seleccione "Ejecutar como administrador".
Extensibilidad de configuración: conceptos básicos
Visión general
Para demostrar algunas de las características de extensibilidad de configuración básicas, usamos el ejemplo inventado de un módulo de registro personalizado. El módulo en sí no es todo lo especial y simplemente controla un evento de registro de IIS integrado - LogRequest - y escribe una entrada de registro en un archivo en el disco; piense en ella como una versión básica del registro de IIS.
La extensibilidad de la configuración entra en juego porque el módulo debe saber dónde registrar información. El módulo debe tener una sección de configuración personalizada que almacene su configuración; en este caso, la ubicación del archivo de registro.
Paso 1: El archivo de esquema
El primer paso para agregar una nueva sección de configuración es definir la sección. Defina el esquema de sección en xml y coloque el archivo en el %windir%\system32\inetsrv\config\schema directorio .
Cree un archivo xml denominado simpleLogging_Schema.xml y coloque lo siguiente en él:
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="%systemdrive%\inetpub\logs\simpleLogs" expanded="true" encrypted="false" />
</sectionSchema>
</configSchema>
El esquema anterior hace dos cosas. En primer lugar, define una nueva sección de configuración denominada "simpleLogging" mediante el <elemento sectionSchema> . En segundo lugar, define un atributo de esa nueva sección de configuración denominada "logfileDirectory".
Puede ver en el archivo de esquema que el atributo es una cadena y el sistema de configuración no lo cifrará.
El atributo expanded="true" indica al sistema de configuración que expande automáticamente las variables de entorno cuando se usan. Si no creó el archivo en el %windir%\system32\inetsrv\config\schema directorio, muévalo allí ahora.
A continuación, cree el directorio predeterminado especificado para "logfileDirectory", ya que probablemente no exista en la máquina. Ejecute el siguiente comando desde la línea de comandos para crear el directorio:
md %systemdrive%\inetpub\logs\simpleLogs
El grupo de Windows IIS_IUSRS debe tener permisos de escritura en el directorio para que el módulo SimpleLogging que creamos en el paso 4 pueda escribir archivos de registro en él. Ejecute el siguiente comando en la línea de comandos:
icacls %systemdrive%\inetpub\logs\simpleLogs /grant BUILTIN\IIS_IUSRS:RW
Más información sobre el esquema
Aunque el paso 1 se completa en términos de nuestro ejemplo, es adecuado analizar los archivos de esquema. En el esquema anterior, simplemente creamos una nueva sección de configuración simpleLogging que existe en system.webServer y se especificó un atributo personalizado. Sin embargo, puede crear fácilmente una configuración personalizada más compleja con colecciones, elementos y atributos. En la lista siguiente se muestran algunos ejemplos, pero la mejor manera de aprender es examinar el archivo de esquema para la configuración de IIS. Encuéntralo en %windir%\system32\inetsrv\config\schema\IIS\_schema.xml.
atributo
Información de esquema:
<attribute name="" [String, Required] [XML name of the attribute] type="" [bool|enum|flags|uint|int|int64|string|timeSpan, Required] [Runtime type] required="false" [bool] [Indicates if it must be set] isUniqueKey="false" [bool] [Serves as the collection key] isCombinedKey="false" [bool] [Part of a multi-attribute key] defaultValue="" [String] [Default value or comma-delimited flags] encrypted="false" [bool] [Indicates if the value persisted is encrypted] expanded="false" [bool] [Environment variables are expanded when read] allowInfinite="false" [bool] [Indicates if "Infinite" can be set] timeSpanFormat="string" [string|seconds|minutes] [hh:mm:ss or number] validationType="" [See validation below] validationParameter="" [See validation below] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <attribute name="logfileDirectory" type="string" /> </sectionSchema> </configSchema>element
Información de esquema:
<element name="" [String, Required] [XML name of the element] isCollectionDefault="false" [bool] [Indicates if default values are held for other elements in this collection] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <element name="logfile"> <attribute name="fileLocation" type="string" /> </element> </sectionSchema> </configSchema>Colección
Información de esquema:
<collection addElement="" [String] [Name of Add directive, if supported] removeElement="" [String] [Name of Remove directive, if supported] clearElement="" [String] [Name of Clear directive, if supported] defaultElement="" [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] mergeAppend="true" [bool] [Indicates whether or not deepest set values are appended] allowDuplicates="false" [bool] [Indicates if multiple elements may have the same key] allowUnrecognizedAttributes="false" [bool] [Indicates if non-schema attributes are ok] />Example:
<configSchema> <sectionSchema name="system.webServer/simpleLogging"> <collection addElement="add"> <attribute name="logfileDirectory" type="string" /> </collection> </sectionSchema> </configSchema>
Paso 2: Registrar la nueva sección
Ahora que se ha definido una nueva sección, indique al sistema de configuración la sección. Registre la nueva sección en el %windir%\system32\inetsrv\config\applicationHost.config archivo. Abra el archivo y registre la sección simpleLogging como se indica a continuación:
<configSections>
...
<sectionGroup name="system.webServer">
<section name="simpleLogging"/>
...
</sectionGroup>
</configSections>
Este paso se ha completado. La sección se define y registra.
Para comprobar que la sección se ha registrado correctamente, ejecute el siguiente comando desde la línea de comandos:
%windir%\system32\inetsrv\appcmd list config –section:system.webServer/simpleLogging
Si todo ha ido bien hasta ahora, la sección de configuración se muestra y verá algo parecido a esto:
<system.webServer>
<simpleLogging />
</system.webServer>
Paso 3: Establecer la configuración
Ahora que la sección se ha registrado, establezca la configuración como haría con cualquier otra configuración mediante un archivo web.config o establézcala con la herramienta appcmd.exe en el %windir%\system32\inetsrv\ directorio. También puede establecer la configuración mediante cualquiera de las API de configuración. Una opción más consiste en establecer la configuración a través de la nueva interfaz de usuario de administración de IIS mediante la creación de un módulo de interfaz de usuario y la llamada a las API de configuración para establecer la configuración.
Por el momento, establezca la configuración agregándola a un nuevo archivo web.config para el sitio web de IIS predeterminado (el instalado en %systemdrive%\inetpub\wwwroot\ y denominado "Sitio web predeterminado" en la configuración predeterminada de IIS). Cree un archivo denominado web.config y agregue lo siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" />
</system.webServer>
</configuration>
Puede lograr lo mismo desde la línea de comandos mediante:
%windir%\system32\inetsrv\appcmd set config "Default Web Site" –section:system.webServer/simpleLogging
/logfileDirectory:""%"systemdrive"%"\inetpub\logs\simpleLogs"
Ejecute el siguiente comando para enumerar la configuración del "Sitio web predeterminado":
%windir%\system32\inetsrv\appcmd list config "Default Web Site" –section:system.webServer/simpleLogging
La salida es similar a la siguiente:
<system.webServer>
<simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" />
</system.webServer>
Nota:
Si el directorio especificado para "logfileDirectory" no existe, créelo ahora. El grupo de Windows IIS_IUSRS debe tener permisos de escritura en el directorio para que el módulo SimpleLogging que creamos en el paso siguiente pueda escribir archivos de registro en él. En el paso 1 anterior se mostró el comando de línea de comandos usado para establecer los permisos correctos en el directorio predeterminado. Use un comando similar si ha creado un directorio diferente.
Paso 4: El módulo SimpleLogging
En esta fase, hemos ampliado el sistema de configuración con la sección de configuración simpleLogging del cliente. Concluimos nuestro repaso a la extensibilidad de la configuración básica creando el módulo y mostrando cómo usar la configuración personalizada desde él.
Crearemos un ensamblado de .NET con nombre seguro que todos los sitios web de IIS puedan usar. Debemos usar algunas herramientas del SDK de .NET para esta sección; Si no está instalado, descárguelo desde el
Entre los pasos necesarios se incluyen:
Cree un directorio en el que trabajar y abrirlo.
Cree un archivo SimpleLoggingModule.cs y agregue el código siguiente mediante un editor de texto:
using System; using System.Web; using System.Web.Hosting; using System.IO; using Microsoft.Web.Administration; namespace ConfigurationExtensibility { public class SimpleLoggingModule : IHttpModule { private string GetlogfileDirectory(HttpContext context) { ConfigurationSection section = WebConfigurationManager.GetSection( context, "system.webServer/simpleLogging"); return (string)section["logfileDirectory"]; } public void Init(HttpApplication context) { context.LogRequest += new EventHandler(LogRequest_EventHandler); } private void LogRequest_EventHandler(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; LogRequest(application.Context); } private void LogRequest(HttpContext context) { string logfileDirectory = GetlogfileDirectory(context); if (Directory.Exists(logfileDirectory) == false) { Directory.CreateDirectory(logfileDirectory); } string logfile = Path.Combine(logfileDirectory, DateTime.Now.ToString("yyyyMMdd") + ".log"); string ogline = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}", DateTime.Now, context.Request.HttpMethod, context.Request.UserHostAddress, context.Request.Url.ToString(), context.Request.ServerVariables["LOGON_USER"], context.Request.UserAgent, context.Response.StatusCode, HostingEnvironment.SiteName); File.AppendAllText(logfile, ogline + Environment.NewLine); } public void Dispose() { } } }Debemos hacer que sea un módulo con nombre seguro para que IIS lo use como módulo global para todos los sitios. En primer lugar, cree un archivo de clave de nombre seguro. Abra un terminal y cambie el directorio para el que contiene el archivo SimpleLoggingModule.cs. A continuación, ejecute el siguiente comando (asegúrese de que el directorio binario del SDK de .NET Framework está en la ruta):
sn.exe /k keyFile.snkSi esto funcionó correctamente, la salida de sn.exe dice algo parecido a "Par de claves escrito en keyFile.snk".
Ahora compile el archivo y cree un archivo DLL. Ejecute el siguiente comando desde el símbolo del sistema:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library SimpleLoggingModule.cs /r:System.Web.dll /r:%windir%\system32\inetsrv\Microsoft.Web.Administration.dll /keyfile:keyFile.snkA continuación, coloque el ensamblado compilado (SimpleLoggingModule.dll) en la caché global de ensamblados. Ejecute el siguiente comando desde el símbolo del sistema:
gacutil.exe /i SimpleLoggingModule.dllAhora debemos agregar nuestro módulo a la lista de módulos que IIS puede usar. Antes de eso, sin embargo, debemos obtener el nombre completo del ensamblado recién creado. Ejecute lo siguiente en la línea de comandos:
gacutil.exe /l SimpleLoggingModuleEsto genera algo parecido a esto:
SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSILAgregue el módulo a la lista de módulos que IIS puede usar. Ejecute el comando siguiente. Sin embargo, asegúrese de reemplazar las variables por la salida del último comando.
%windir%\system32\inetsrv\appcmd add module /name:"SimpleLoggingModule" /type:"ConfigurationExtensibility.SimpleLoggingModule, SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288"Esto agrega la entrada de configuración necesaria al archivo de applicationHost.config : el archivo de configuración global de IIS.
El proceso se ha completado. El módulo personalizado, que usa la configuración personalizada, se ha configurado. Todo lo que queda es probarlo. Iniciar el explorador y navegar a http://localhost/. Verá lo siguiente:
Si recibe un error, asegúrese de que ha concedido los permisos de grupo de IIS_IUSRS para escribir en el directorio.
Abra %systemdrive%\inetpub\logs\simpleLogs (o cualquier directorio que haya usado en la configuración) y tenga un archivo .log denominado con la fecha de hoy. Abra el archivo y vea algo parecido a esto:
Experimente con la configuración para asegurarse de que funciona. Intente quitar la sección simpleLogging del archivo de web.config y compruebe si los registros van a la ubicación predeterminada (asegúrese de que el usuario de ASPNET tenga los permisos correctos).
Nota:
El módulo que acabamos de crear es solo para fines de demostración y no debe usarse en un entorno de producción. Se producirá un error si hay varias solicitudes que intentan escribir una entrada de registro al mismo tiempo.
Extensibilidad de configuración: escenarios más avanzados
Visión general
En la sección anterior se examinaron los conceptos básicos de la extensibilidad de la configuración, simplemente ampliando la configuración mediante el esquema. Sin embargo, hay más energía disponible al extender la configuración.
En primer lugar, existe la posibilidad de ampliar la configuración para usar objetos COM para recuperar la configuración, lo que le permite almacenar la información de configuración dondequiera que quiera y, sin embargo, sin preocuparse de que las API de configuración no puedan leerla.
En segundo lugar, existe la capacidad de definir métodos para manipular y operar en la configuración. A continuación, se puede llamar a estos métodos mediante las API de configuración existentes. Juntas estas dos características proporcionan una compatibilidad eficaz para crear extensiones de configuración personalizadas.
En esta sección se examina primero la modificación de la configuración personalizada simpleLogging de la primera parte de este artículo para recuperar los valores de configuración mediante un componente COM. A continuación, examina la adición de un método de configuración respaldado por un componente COM que realiza acciones.
Extensión de la configuración: un atributo respaldado por COM
Esta sección amplía el esquema para tener un atributo denominado "logfileCount". Este atributo de configuración está respaldado por un ensamblado de .NET (un archivo DLL administrado, programado en C#), que cuenta el número de archivos de registro en el directorio de registro; una vez más, se trata de un escenario contrivido, pero uno que algunos podrían resultar útiles.
Nota:
No es necesario crear un componente .NET; basta con un componente COM válido.
Paso 1: Crear y registrar el componente COM de .NET
En primer lugar, para crear el componente COM de .NET. Cree un directorio para almacenar los archivos que crearemos y el componente que compilaremos y abriremos.
El componente que creamos debe implementar algunas interfaces expuestas a través de COM por el sistema de configuración de IIS. Para usar la interfaz COM desde el componente .NET, debemos crear un archivo DLL de interoperabilidad: esto permite al sistema de configuración de IIS comunicarse con el componente cuando debe obtener un valor para el atributo logfileCount. Para crear el archivo DLL de interoperabilidad, use una herramienta desde el SDK de .NET Framework denominado tlbimp.exe. Tener instalado Visual Studio o el SDK de .NET es un requisito previo para este artículo. Si no está instalado, descárguelo de
Estos son los pasos para crear el componente COM de .NET:
Abra una terminal y cambie al directorio que creó para almacenar los archivos. Asegúrese de que el directorio bin de .NET Framework está en la ruta de acceso y, a continuación, ejecute el siguiente comando en la línea de comandos:
tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snkLa herramienta tlbimp.exe habrá creado un archivo denominado AppHostAdminLibrary.dll: este es el archivo dll de interoperabilidad que necesitamos.
Cree un archivo ConfigurationExtensibility.cs en el directorio que creó anteriormente y copie el siguiente código de C# en el archivo mediante un editor de texto:
using System; using System.IO; using System.Runtime.InteropServices; using AppHostAdminLibrary; namespace ConfigurationExtensibility { [ComVisible(true)] public class SimpleLoggingExtension : IAppHostPropertyExtension { public void ProvideGetProperty(IAppHostElement pElement, IAppHostProperty pProperty) { switch(pProperty.Name) { case "logfileCount": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length; else pProperty.Value = 0; break; } } } }Nota:
Tenemos una clase que implementa la interfaz IAppHostPropertyExtension . El propio código solo lee el atributo logfileDirectory para obtener el directorio logfile y, a continuación, cuenta todos los archivos que coinciden con el patrón de nombre de archivo de los archivos de registro creados por SimpleLoggingModule.
Compile el componente mediante la ejecución del comando siguiente desde la línea de comandos:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll ConfigurationExtensibility.cs /keyfile:keyFile.snkAhora tiene el componente COM de .NET ConfigurationExtensibility.dll.
Registre el componente COM administrado que acaba de crear. Ejecute el siguiente comando en el símbolo del sistema:
%windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /register /codebase ConfigurationExtensibility.dllEsto registra el componente COM en el Registro. Ha creado y registrado un componente COM de .NET que puede usar el sistema de configuración.
Paso 2: Actualización del archivo de esquema
A continuación, modifique el archivo simpleLogging_Schema.xml creado anteriormente. Abra el archivo y cámbielo para que tenga el siguiente aspecto (el nuevo atributo está en negrita):
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="%systemdrive%\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
<attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
</sectionSchema>
</configSchema>
Paso 3: Pruebas
Todo debería funcionar correctamente ahora; solo queda realizar las pruebas. Para probar la extensión, use un script sencillo. Cree un archivo SimpleLoggingTest.vbs y escriba el texto siguiente:
Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging",
"MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)
En esta fase, debería haber un único archivo de registro del resultado de haber probado el módulo SimpleLoggingModule anteriormente. Ejecute el script desde la línea de comandos. Verás un resultado de 1.
Extensión de la configuración: un método respaldado por COM
Por último, en este artículo se examina la extensión de la configuración con un método . Los métodos de configuración son operaciones a las que el sistema de configuración puede llamar para realizar trabajos, como modificar una configuración o eliminar archivos de registro, que es lo que hará este método. En este ejemplo, se agrega un método para eliminar todos los archivos de registro creados por SimpleLoggingModule.
Paso 1: El código
En primer lugar, agregue el código necesario para el método . Abra el archivo ConfigurationExtensibility.cs creado anteriormente y actualícelo para que tenga el siguiente aspecto (nuevo código en negrita):
using System; using System.IO; using System.Runtime.InteropServices; using AppHostAdminLibrary; namespace ConfigurationExtensibility { [ComVisible(true)] public class SimpleLoggingExtension : IAppHostPropertyExtension, IAppHostMethodExtension { public void ProvideGetProperty(IappHostElement pElement, IappHostProperty pProperty) { switch(pProperty.Name) { case "logfileCount": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) pProperty.Value = Directory.GetFiles(logDirectory, "????????.log").Length; else pProperty.Value = 0; break; } } public void ProvideMethod(IappHostMethod pMethod, IappHostMethodInstance pMethodInstance, IappHostElement pElement) { switch(pMethod.Name) { case "deleteLogs": string logDirectory = (string) pElement.Properties["logfileDirectory"].Value; if(Directory.Exists(logDirectory)) { foreach(string logFile in Directory.GetFiles(logDirectory, "????????.log")) { File.Delete(logFile); } } break; } } } }Nota:
Hemos implementado la interfaz IAppHostMethodExtension . Esta interfaz tiene un único método denominado ProvideMethod que proporciona lógicamente el método . Cuando alguien llama al método (consulte el paso 3 para saber cómo hacerlo), el sistema de configuración llama a ProvideMethod y pasa parámetros, uno de los cuales tiene el nombre del método al que se llama; en el código anterior, solo se controla un método denominado "deleteLogs".
Vuelva a compilar el proyecto utilizando:
%windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll ConfigurationExtensibility.cs /keyfile:keyFile.snk
Paso 2: Actualización del esquema
A continuación, indique el esquema sobre nuestro nuevo método. En esta fase, debería estar bastante familiarizado con su archivo simpleLogging_Schema.xml , así que ábralo de nuevo y cámbielo para que tenga un aspecto similar al siguiente:
<configSchema>
<sectionSchema name="system.webServer/simpleLogging">
<attribute name="logfileDirectory" type="string"
defaultValue="c:\inetpub\logs\simpleLogs\" expanded="true" encrypted="false" />
<attribute name="logfileCount" type="int" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
<method name="deleteLogs" extension="ConfigurationExtensibility.SimpleLoggingExtension" />
</sectionSchema>
</configSchema>
El cambio definió un nuevo método denominado "deleteLogs" e indica a la configuración dónde buscar el método.
Paso 3: Pruebas
Por último, compruebe si el método funciona. Una manera rápida y sencilla de hacerlo es escribir un script de VB sencillo. A continuación se muestra un script de ejemplo que genera logfileCount y, a continuación, llama a nuestro método y genera logfileCount. Basta con actualizar el archivo SimpleLoggingTest.vbs que creó anteriormente y escriba lo siguiente:
Dim adminManager, section
Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")
Set section = adminManager.GetAdminSection("system.webServer/simpleLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site")
WScript.Echo(section.Properties.Item("logfileCount").Value)
section.Methods.Item("deleteLogs").CreateInstance().Execute()
WScript.Echo(section.Properties.Item("logfileCount").Value)
Ejecute el script desde una línea de comandos y obtenga una salida de:
1
0
El anterior era una introducción rápida sobre cómo proporcionar nuevos métodos de configuración y configuración respaldados por componentes COM. Como probablemente haya encontrado, la extensión de la configuración mediante este método es muy eficaz.
Extensibilidad de configuración: extensión de la configuración existente
El aspecto final de la extensibilidad de la configuración es la capacidad de ampliar las secciones de configuración existentes, como la sección system.webServer/sites , o para ampliar la sección system.webServer/simpleLogging creada en las dos secciones anteriores.
Extender una sección de configuración existente es tan fácil como crear una nueva. Simplemente defina el esquema como xml y coloque el archivo de esquema en el %windir%\system32\inetsrv\config\schema\ directorio. Esto debería ser familiar, ya que lo hemos hecho anteriormente más de una vez.
Extensión de la configuración de "sitios"
Para mostrar mejor cómo extender una sección de configuración existente, ampliamos la sección system.applicationHost/sites : la sección de configuración que se usa para definir sitios. Ampliamos la sección de sitios agregando un atributo "owner" y un atributo "ownerEmail". Los atributos como estos son útiles cuando se hospedan varios sitios en un solo cuadro y se desea realizar un seguimiento de quién es el propietario de los distintos sitios.
En primer lugar, cree un nuevo archivo de esquema. Cree un archivo siteExtension_schema.xml en el %windir%\system32\inetsrv\config\schema\ directorio y escriba el texto siguiente:
<configSchema>
<sectionSchema name="system.applicationHost/sites">
<collection addElement="site">
<attribute name="owner" type="string" />
<attribute name="ownerEmail" type="string" />
</collection>
</sectionSchema>
</configSchema>
Al extender el esquema de una sección existente, simplemente cree un <sectionSchema> elemento y establezca el atributo name como el mismo que una sección existente. En el archivo de esquema anterior, hemos definido una <secciónSchema> con un nombre "system.applicationHost/sites" : este es el mismo que el nombre sectionSchema en el archivo IIS_Schema.xml en el directorio Schema.
Pruebe nuestras modificaciones agregando valores para los atributos "owner" y "ownerEmail" y, a continuación, compruebe el archivo de configuración para ver los cambios. Simplemente ejecute el siguiente comando desde la línea de comandos:
%windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"
Para ver si se aplicó la configuración, ejecute el siguiente comando y compruebe la salida:
%windir%\system32\inetsrv\appcmd list site "Default Web Site" /config
La salida debe ser similar a la siguiente:
<system.applicationHost>
<sites>
...
<site name="Default Web Site" id="1" siteOwner="John Contoso" siteOwnerEmail="john@contoso.com">
...
...
</site>
</sites>
</system.applicationHost>
Nota:
Si ahora navega a http://localhost/, podrías recibir un mensaje de error del servidor 500.19. Se trata de un problema conocido y se resolverá en una compilación posterior de IIS. Para solucionar este problema, ejecute "iisreset" desde la línea de comandos.
Esto concluye la posibilidad de examinar la extensibilidad de la configuración. Esperemos que pueda usar la extensibilidad de la configuración de una manera interesante después de leer los ejemplos anteriores.