Compartilhar via


Extensibilidade da configuração

O sistema de configuração no IIS 7.0 e superior é baseado em arquivos xml distribuídos que contêm a configuração do IIS, ASP.NET e outros componentes; a flexibilidade no sistema de configuração também permite que a configuração seja definida em vários níveis, incluindo no servidor, no site e no nível do aplicativo. A configuração no nível do site e do aplicativo coexiste com a configuração do ASP.NET em arquivos web.config.

Um aspecto do novo sistema de configuração é a facilidade com que a configuração pode ser estendida. É possível, com apenas algumas alterações simples, integrar seções de configuração personalizadas diretamente ao sistema de configuração e manipular essas configurações usando as APIs de administração existentes. A configuração é estendida simplesmente definindo uma nova seção de configuração em um arquivo de esquema XML que então é descartado no diretório %windir%\system32\inetsrv\config\schema do esquema IIS. Por fim, a nova seção de configuração deve ser registrada no arquivo de configuração global do IIS.

Este artigo apresenta um exemplo que usa extensibilidade de configuração básica e alguns dos cenários mais avançados. Embora o exemplo usado seja artificial, ele deve ser suficiente para demonstrar o poder da extensibilidade da configuração.

Pré-requisitos

Há vários pré-requisitos para este artigo. Elas incluem:

  1. Ter uma instalação padrão do IIS 7.0 ou superior. Se o IIS não estiver instalado, instale-o abrindo o Gerenciador do Servidor e adicionando a função de Servidor Web (IIS).
  2. Verifique se você tem o SDK do .NET Framework instalado. Se você não tiver o SDK instalado, obtenha-o de https://www.microsoft.com/downloads
  3. Usando várias ferramentas no diretório bin do SDK. Use o Prompt de Comando do SDK no menu iniciar ou adicione o diretório bin ao seu caminho (por exemplo, %systemdrive%\Program Files\Microsoft.NET\SDK\v2.0\Bin)
  4. Executando todos os comandos de um prompt de comando com privilégios elevados. Clique com o botão direito do mouse em "Prompt de Comando do SDK" (ou "Prompt de Comando") no menu iniciar e selecione "Executar como administrador".

Extensibilidade da configuração – Noções básicas

Visão geral

Para demonstrar alguns dos recursos básicos de extensibilidade de configuração, usamos o exemplo fictício de um módulo de registro em log personalizado. O módulo em si não é tão especial e simplesmente manipula um evento de registro em log interno do IIS – LogRequest – e grava uma entrada de log em um arquivo em disco; pense nele como uma versão básica do registro em log do IIS.

A extensibilidade de configuração entra em jogo porque o módulo precisa saber onde registrar informações em log. O módulo deve ter uma seção de configuração personalizada que armazene sua configuração, neste caso, o local do logfile.

Etapa 1 – O arquivo de esquema

A primeira etapa na adição de uma nova seção de configuração é definir a seção. Defina o esquema de seção em xml e solte o arquivo no diretório %windir%\system32\inetsrv\config\schema.

Crie um arquivo xml chamado simpleLogging_Schema.xml e coloque o seguinte nele:

<configSchema> 
    <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" 
            defaultValue="%systemdrive%\inetpub\logs\simpleLogs" expanded="true" encrypted="false" />

    </sectionSchema> 
</configSchema>

O esquema acima faz duas coisas. Primeiro, ele define uma nova seção de configuração chamada "simpleLogging" usando o elemento <sectionSchema>. Em segundo lugar, ele define um atributo dessa nova seção de configuração chamada "logfileDirectory".

Você pode ver no arquivo de esquema que o atributo é uma cadeia de caracteres e que o sistema de configuração não vai criptografá-lo. O expanded="true" diz para o sistema de configuração para expandir automaticamente as variáveis de ambiente quando usado. Se você não criou o arquivo no diretório %windir%\system32\inetsrv\config\schema, mova-o para lá agora.

Em seguida, crie o diretório padrão especificado para "logfileDirectory", pois ele provavelmente não existe em seu computador. Execute o seguinte comando na linha de comando para criar o diretório:

md %systemdrive%\inetpub\logs\simpleLogs

O grupo do Windows IIS_IUSRS deve ter permissões de gravação no diretório para que o módulo SimpleLogging que criamos na Etapa 4 possa gravar arquivos de log nele. Execute o seguinte comando na linha de comando:

icacls %systemdrive%\inetpub\logs\simpleLogs /grant BUILTIN\IIS_IUSRS:RW

Mais informações sobre o esquema

Embora a Etapa 1 esteja concluída em termos de nosso exemplo, é apropriado discutir os arquivos do esquema. No esquema acima, simplesmente criamos uma nova seção de configuração simpleLogging que existe em system.webServer e especificamos um atributo personalizado. No entanto, você pode criar facilmente uma configuração personalizada mais complexa com coleções, elementos e atributos. A lista a seguir mostra alguns exemplos, mas a melhor maneira de aprender é examinar o arquivo de esquema para a configuração do IIS. Encontre-o em %windir%\system32\inetsrv\config\schema\IIS\_schema.xml.

  • attribute

    Informações 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] 
    />
    

    Exemplo:

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <attribute name="logfileDirectory" type="string" />
      </sectionSchema> 
    </configSchema>
    
  • element

    Informações 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] />
    

    Exemplo:

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <element name="logfile"> 
          <attribute name="fileLocation" type="string" /> 
        </element> 
      </sectionSchema> 
    </configSchema>
    
  • collection

    Informações 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] 
    />
    

    Exemplo:

    <configSchema> 
      <sectionSchema name="system.webServer/simpleLogging"> 
        <collection addElement="add"> 
          <attribute name="logfileDirectory" type="string" /> 
        </collection> 
      </sectionSchema> 
    </configSchema>
    

Etapa 2 – Como registrar a nova seção

Agora que uma nova seção foi definida, informe o sistema de configuração sobre a seção. Registre a nova seção no arquivo %windir%\system32\inetsrv\config\applicationHost.config. Abra o arquivo e registre a seção simpleLogging como abaixo:

<configSections> 
    ...
    <sectionGroup name="system.webServer"> 
        <section name="simpleLogging"/> 
        ...
    </sectionGroup> 
</configSections>

Essa etapa está concluída. A seção é definida e registrada.

Para verificar se a seção foi registrada corretamente, execute o seguinte comando na linha de comando:

%windir%\system32\inetsrv\appcmd list config –section:system.webServer/simpleLogging

Se tudo tiver dado certo até agora, a seção de configuração será exibida e você verá algo assim:

<system.webServer> 
    <simpleLogging /> 
</system.webServer>

Etapa 3 – Definir a configuração

Agora que a seção foi registrada, defina a configuração como você faria com qualquer outra configuração usando um arquivo web.config ou defina-a usando a ferramenta appcmd.exe no diretório %windir%\system32\inetsrv\. Você também pode definir a configuração usando qualquer uma das APIs de configuração. Mais uma opção é definir a configuração por meio da nova interface do usuário de administração do IIS criando um módulo de interface do usuário e chamando as APIs de configuração para definir a configuração.

Por enquanto, defina a configuração adicionando-a a um novo arquivo web.config para o site padrão do IIS (aquele instalado em %systemdrive%\inetpub\wwwroot\ e chamado "Site Padrão" na configuração padrão do IIS). Crie um arquivo chamado web.config e adicione o seguinte:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
        <simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" /> 
    </system.webServer> 
</configuration>

Você pode obter a mesma coisa na linha de comando usando:

%windir%\system32\inetsrv\appcmd set config "Default Web Site" –section:system.webServer/simpleLogging 
                                    /logfileDirectory:""%"systemdrive"%"\inetpub\logs\simpleLogs"

Execute o seguinte comando para listar a configuração do "Site Padrão":

%windir%\system32\inetsrv\appcmd list config "Default Web Site" –section:system.webServer/simpleLogging

A saída é algo assim:

<system.webServer> 
    <simpleLogging logfileDirectory="%systemdrive%\inetpub\logs\simpleLogs" /> 
</system.webServer>

Observação

Se o diretório especificado para "logfileDirectory" não existir, crie-o agora. O grupo do Windows IIS_IUSRS deve ter permissões de gravação no diretório para que o módulo SimpleLogging que criamos na próxima etapa possa gravar arquivos de log nele. A etapa 1 acima mostrou o comando de linha de comando usado para definir as permissões corretas no diretório padrão. Use um comando parecido se você tiver criado um diretório diferente.

Etapa 4 – O módulo SimpleLogging

Nesse estágio, estendemos o sistema de configuração com nossa seção de configuração de simpleLogging do cliente. Arredondamos a aparência da extensibilidade básica de configuração criando o módulo e mostrando como usar a configuração personalizada dele.

Vamos criar um assembly .NET fortemente nomeado que todos os sites no IIS podem usar. Devemos usar algumas ferramentas do SDK do .NET para esta seção; se não estiver instalado, baixe-o do site www.microsoft.com/downloads.

As etapas necessárias incluem:

  1. Criar um diretório no qual trabalhar e abri-lo.

  2. Crie um arquivo SimpleLoggingModule.cs e adicione o seguinte código a ele usando um 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()
            {
            }    
        }
    }
    
  3. Devemos fazer deste um módulo fortemente nomeado para que o IIS o use como um módulo global para todos os sites. Primeiro, crie um arquivo de chave de nome forte. Abra um prompt de comando e altere o diretório para aquele que contém o arquivo SimpleLoggingModule.cs. Em seguida, execute o seguinte comando (verifique se o diretório bin do SDK do .NET Framework está no caminho):

    sn.exe /k keyFile.snk
    

    Se isso funcionar corretamente, a saída de sn.exe dirá algo como "Par de chaves gravado em keyFile.snk"

  4. Agora compile o arquivo e crie uma DLL. Execute o comando a seguir no prompt de comando:

    %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.snk
    
  5. Então coloque o assembly compilado (SimpleLoggingModule.dll) no Cache de Assembly Global. Execute o comando a seguir no prompt de comando:

    gacutil.exe /i SimpleLoggingModule.dll
    
  6. Agora, devemos adicionar nosso módulo à lista de módulos que o IIS pode usar. Antes disso, no entanto, devemos obter o nome completo do assembly que acabou de ser criado. Execute o seguinte na linha de comando:

    gacutil.exe /l SimpleLoggingModule
    

    Isso gera algo assim:

    SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288, processorArchitecture=MSIL
    
  7. Adicione o módulo à lista de módulos que o IIS pode usar. Execute o comando abaixo. No entanto, certifique-se de substituir as variáveis pela saída do último comando.

    %windir%\system32\inetsrv\appcmd add module /name:"SimpleLoggingModule" 
    /type:"ConfigurationExtensibility.SimpleLoggingModule, SimpleLoggingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=652a8d02f48e4288"
    

    Isso adiciona a entrada de configuração necessária ao arquivo applicationHost.config – arquivo de configuração global do IIS.

  8. O processo está concluído. O módulo personalizado, que usa a configuração personalizada, foi configurado. Tudo o que resta é testá-lo. Inicie o navegador e navegue até http://localhost/. Você verá o seguinte:

    Screenshot of accessing local host in a web browser.

Se você receber um erro, verifique se você deu ao grupo IIS_IUSRS permissões para gravar no diretório.

Abra %systemdrive%\inetpub\logs\simpleLogs (ou qualquer diretório usado na configuração) e você terá um arquivo .log nomeado com a data de hoje. Abra o arquivo e você verá algo assim:

Screenshot of a log file with the time stamps of the accessed directories for the local host website.

Experimente a configuração para garantir que ela esteja funcionando. Tente remover a seção simpleLogging do arquivo web.config e verifique se os logs vão para o local padrão (apenas verifique se o usuário do ASPNET tem as permissões corretas).

Observação

O módulo que acabamos de criar é apenas para fins de demonstração e não deve ser usado em um ambiente de produção. Ele falhará se houver várias solicitações tentando gravar uma entrada de log ao mesmo tempo.

Extensibilidade de configuração – cenários mais avançados

Visão geral

A seção anterior examinou os conceitos básicos de extensibilidade de configuração simplesmente estendendo a configuração usando o esquema. Porém, há mais energia disponível ao estender a configuração.

Primeiro, há a capacidade de estender a configuração para usar objetos COM para recuperar a configuração, permitindo que você armazene as informações de configuração sempre que desejar, sem se preocupar que as APIs de configuração não possam lê-la.

Em segundo lugar, há a capacidade de definir métodos para manipular e operar em sua configuração. Esses métodos podem ser chamados usando as APIs de configuração existentes. Juntos, esses dois recursos dão suporte avançado para a criação de extensões de configuração personalizadas.

Esta seção analisa primeiro a modificação da configuração personalizada simpleLogging da primeira parte deste artigo para recuperar valores de configuração usando um componente COM. Em seguida, ele analisa a adição de um método de configuração apoiado por um componente COM que executa ações.

Como estender a configuração – um atributo apoiado por COM

Esta seção estende o esquema para ter um atributo chamado "logfileCount". Esse atributo de configuração é apoiado por um assembly .NET (uma dll gerenciada – programada em C#), que conta o número de arquivos de log no diretório de log; mais uma vez, é um cenário fictício, mas que alguns podem achar útil.

Observação

Você não precisa criar um componente do .NET, qualquer componente COM válido servirá.

Etapa 1 – Como criar e registrar o componente .NET COM

Primeiro, para criar o componente .NET COM. Crie um diretório para armazenar os arquivos que vamos criar e o componente que vamos compilar e abrir.

O componente que criamos deve implementar algumas interfaces expostas por meio de COM pelo sistema de configuração do IIS. Para usar a interface COM do componente .NET, devemos criar uma dll de interoperabilidade. Isso permite que o sistema de configuração do IIS fale com o componente quando ele deve obter um valor para o atributo logfileCount. Para criar a dll de interoperabilidade, use uma ferramenta do SDK do .NET Framework chamada tlbimp.exe. Ter o Visual Studio ou o SDK do .NET instalado é um pré-requisito para este artigo. Se não estiver instalado, baixe-o de www.microsoft.com/downloads.

Estas são as etapas para criar o componente .NET COM:

  1. Abra um prompt de linha de comando e altere para o diretório que você criou para armazenar os arquivos. Verifique se o diretório bin do .NET Framework está em seu caminho e execute o seguinte comando na linha de comando:

    tlbimp %windir%\system32\inetsrv\nativerd.dll /keyfile:keyFile.snk
    

    A ferramenta tlbimp.exe terá criado um arquivo chamado AppHostAdminLibrary.dll – essa é a dll de interoperabilidade de que precisamos.

  2. Crie um arquivo ConfigurationExtensibility.cs no diretório que você criou antes e copie o seguinte código C# para o arquivo usando um 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;
            }
            }
        }
    }
    

    Observação

    Temos uma classe que está implementando a interface IAppHostPropertyExtension. O próprio código lê apenas o atributo logfileDirectory para obter o diretório logfile e então conta todos os arquivos que correspondem ao padrão de nome de arquivo para os arquivos de log que SimpleLoggingModule criou.

  3. Compile o componente executando o seguinte comando na linha de comando:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll 
                        ConfigurationExtensibility.cs /keyfile:keyFile.snk
    

    Agora você tem o componente .NET COM – ConfigurationExtensibility.dll.

  4. Registre o componente COM gerenciado que você acabou de criar. Execute o comando a seguir no prompt de comando:

    %windir%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /register /codebase ConfigurationExtensibility.dll
    

    Isso registra o componente COM no registro. Você criou e registrou um componente .NET COM que o sistema de configuração pode usar.

Etapa 2 – Atualizar o arquivo de esquema

Então modifique o arquivo simpleLogging_Schema.xml criado antes. Abra o arquivo e altere-o para se parecer com o seguinte (o novo atributo está em negrito):

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

Etapa 3 – Teste

Tudo deve estar funcionando corretamente agora, resta apenas testar. Para testar a extensão, use um script simples. Crie um arquivo SimpleLoggingTest.vbs e insira o seguinte texto:

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)

Neste estágio, deve haver um só arquivo de log de testar o SimpleLoggingModule antes. Execute o script na linha de comando. Você vê uma saída de 1.

Como estender a configuração – um método apoiado por COM

Por fim, este artigo examina a extensão da configuração com um método. Os métodos de configuração são operações que o sistema de configuração pode chamar para fazer um trabalho, como modificar uma configuração ou excluir arquivos de log, que é o que esse método fará. Para este exemplo, vamos adicionar um método para excluir todos os arquivos de log criados pelo SimpleLoggingModule.

Etapa 1 – O código

  1. Primeiro, adicione o código necessário para o método. Abra o arquivo ConfigurationExtensibility.cs criado antes e atualize-o para que tenha a seguinte aparência (novo código em negrito):

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

    Observação

    Implementamos a interface IAppHostMethodExtension. Essa interface tem um só método chamado ProvideMethod que fornece o método de modo lógico. Quando alguém chama o método (consulte a Etapa 3 para fazer isso), o sistema de configuração chama ProvideMethod e passa parâmetros, um dos quais tem o nome do método que está sendo chamado; no código acima, manipulamos apenas um método chamado "deleteLogs".

  2. Compile o projeto novamente usando:

    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /t:library /r:AppHostAdminLibrary.dll 
                ConfigurationExtensibility.cs /keyfile:keyFile.snk
    

Etapa 2 – Atualizar o esquema

Em seguida, informe o esquema sobre nosso novo método. Neste estágio, você deve estar bastante familiarizado com seu arquivo simpleLogging_Schema.xml, portanto, abra-o novamente e altere-o para ficar assim:

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

A alteração definiu um novo método chamado "deleteLogs" e informa à configuração onde procurar o método.

Etapa 3 – Teste

Por fim, verifique se o método está funcionando. Um modo rápido e fácil de fazer isso é escrever um script de VB simples. Veja abaixo um exemplo de script que gera o logfileCount e, em seguida, chama nosso método e gera o logfileCount. Basta atualizar o arquivo SimpleLoggingTest.vbs criado antes e insira o seguinte:

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)

Execute o script de uma linha de comando e você obtém uma saída de:

1
0

Acima foi apresentada uma visão geral rápida de como fornecer novos métodos de configuração e configuração apoiados por componentes COM. Como você provavelmente descobriu, estender a configuração usando esse método é muito eficiente.

Extensibilidade de configuração – estender a configuração existente

O aspecto final da extensibilidade de configuração é a capacidade de estender seções de configuração, como a seção system.webServer/sites, ou estender a seção system.webServer/simpleLogging criada nas duas seções anteriores.

Estender uma seção de configuração é tão fácil quanto criar uma. Basta definir o esquema como xml e colocar o arquivo de esquema no diretório %windir%\system32\inetsrv\config\schema\. Isso deve soar familiar, pois já fizemos isso anteriormente mais de uma vez.

Como estender a configuração de "sites"

Para mostrar melhor como estender uma seção de configuração, estendemos a seção system.applicationHost/sites – a seção de configuração usada para definir sites. Estendemos a seção de sites adicionando um atributo "owner" e um atributo "ownerEmail". Atributos como esses são úteis quando você hospeda vários sites em uma só caixa e quer manter o controle de quem detém os diferentes sites.

Primeiro, crie um arquivo de esquema. Crie um arquivo siteExtension_schema.xml no diretório %windir%\system32\inetsrv\config\schema\ e insira o texto abaixo:

<configSchema> 
    <sectionSchema name="system.applicationHost/sites"> 
        <collection addElement="site"> 
            <attribute name="owner" type="string" /> 
            <attribute name="ownerEmail" type="string" /> 
        </collection> 
    </sectionSchema> 
</configSchema>

Ao estender o esquema de uma seção existente, basta criar um elemento <sectionSchema> e definir o atributo de nome para que seja igual ao de uma seção existente. No arquivo de esquema acima, definimos um <sectionSchema> com um nome "system.applicationHost/sites", que é igual ao nome sectionSchema no arquivo IIS_Schema.xml no diretório Schema.

Teste nossas modificações adicionando valores para os atributos "owner" e "ownerEmail" e verifique o arquivo de configuração para ver as alterações. Basta executar o seguinte comando na linha de comando:

%windir%\system32\inetsrv\appcmd set site "Default Web Site" /owner:"John Contoso" /ownerEmail:"john@contoso.com"

Para ver se a configuração foi aplicada, execute o seguinte comando e verifique a saída:

%windir%\system32\inetsrv\appcmd list site "Default Web Site" /config

A saída deve ser semelhante ao seguinte:

<system.applicationHost> 
    <sites> 
    ...
        <site name="Default Web Site" id="1" siteOwner="John Contoso" siteOwnerEmail="john@contoso.com">
        ...
        ...
        </site> 
    </sites> 
</system.applicationHost>

Observação

Se você procurar http://localhost/, poderá receber uma mensagem de erro do servidor 500.19. Esse é um problema conhecido e será resolvido em uma compilação posterior do IIS. Para contornar esse problema, execute "iisreset" na linha de comando.

Isso conclui analisar a extensibilidade de configuração. Espero que você possa usar a extensibilidade de configuração de um jeito interessante depois de ler os exemplos anteriores.