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:
- 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).
- 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
- 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
) - 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:
Criar um diretório no qual trabalhar e abri-lo.
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() { } } }
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"
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
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
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
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.
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:
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:
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:
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.
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.
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.
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
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".
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.