Desenvolvimento - C#
Acessando configurações do IIS – WinForms – C#
Há pouco tempo o autor necessitou montar uma aplicação que tivesse a possibilidade de criar um Diretório Virtual no IIS, depois de pesquisar um pouco e ler algumas documentações descobriu como fazer isso, veja como.
por Rodrigo S. DoniniFaça download do fonte: IIS_Manager.zip
Figura 01: Interface do exemplo
Neste exemplo vou compartilhar com vocês de forma simples e direta como criar um Diretório Virtual no IIS. Através de uma classe de manipulação que montei CreateVDir(...), nela faremos uso do assembly System.DirectoryServices.dll, que contém as classes e métodos necessários para manipular essa informação, usei pouco do que esse assembly proporciona e pode fazer, e pode ter certeza que vai muito além de configurações de IIS.
O que foi usado para montar este exemplo?
Montei este exemplo usando Visual Studio 2005, .Net Framework 2.0, a linguagem escolhida foi C# e a arquitetura escolhida foi WinForms, mas poderia ter sido feito em WebForms, e qualquer outra linguagem suportada pelo VS.Net e .Net Framework.
Começando
Primeiramente crie um novo projeto Windows Application, e adicione referência do Assembly System.DirectoryServices.dll, que se encontra na pasta padrão do .Net Framework (%SYSTEMROOT%\Microsoft.NET\Framework\{Version}\System.DirectoryServices.dll), veja na figura 02.
Figura 02: Adicionando o Assembly a solução
Este assembly fica dentro da pasta padrão do .Net Framework:
%SYSTEMROOT%\Microsoft.NET\Framework\{Version}\System.DirectoryServices.dll
Entendendo
O assembly System.DirectoryServices tem várias classes, mas usaremos apenas a DirectoryEntry, ela encapsula nós (nodes) ou objetos dentro de uma hierarquia do Active Directory, por sua vez possuem essa classe tem algumas propriedades e seus métodos, os que usaremos descreverão mais adiante resumidamente.
Outro fator foi a preocupação que tive com compatibilidade das versões de Sistema Operacional e IIS, por este motivo é tratado Schema do IIS, que tem a base destas informações de verificação, fiz testes em máquinas virtuais rodando as versões Server e Professional do WinNT, Win2000, Win2003, e funcionou sem problema nelas, mas caso encontrem alguma falha/bug, basta me enviar um e-mail.
Vou explicar alguns trechos do código da classe CreateVDir(...), pois acredito que o resto do código não deva ser novo para os desenvolvedores .Net, caso queira ver o código completo dela, basta baixar o fonte desde exemplo.
A classe DirectoryEntry
Usando a DirectoryEntry inicializamos uma nova instância da node solicitada ao Active Directory localizada pelo path que estamos passando.
deIISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://" + sServerName + "/W3SVC/" + iWebSiteNum + "/Root");
Para que todas as ações (alterações) ocorram com sucesso devemos usar o método Invoke que tem dois parâmetros de overload, a ação do Invoke e os argumentos com a alteração solicitada.
deIISAdmin.Invoke("Delete", new string[] { deAux.SchemaClassName, sVDirName });
Depois de invocada esta ação devermos aplicar ela dentro do Schema que estamos efetuando estas alterações através do seguinte método:
deIISAdmin.CommitChanges();
Para adicionarmos um Diretório Virtual, fazemos o uso de uma propriedade da classe DirectoryEntry chamada Children, juntamente com seu método Add que tem dois parâmetros de overload, nome do diretório e schema onde será criado:
deVDir = deIISAdmin.Children.Add(sVDirName, "IIsWebVirtualDir");
No momento da criação do novo Diretório Virtual setamos algumas propriedades, como: permissão de acesso, pesquisa no diretório, path físico de onde se encontra a WebApp, entre outras propriedades.
deVDir.Properties["AccessRead"][0] = bChkRead;
deVDir.Properties["AccessExecute"][0] = bChkExecute;
deVDir.Properties["AccessWrite"][0] = bChkWrite;
deVDir.Properties["AccessScript"][0] = bChkScript;
deVDir.Properties["AuthNTLM"][0] = bChkAuth;
deVDir.Properties["EnableDefaultDoc"][0] = true;
deVDir.Properties["EnableDirBrowsing"][0] = false;
deVDir.Properties["DefaultDoc"][0] = true;
deVDir.Properties["Path"][0] = sPath;
E como estamos efetuando uma ação dentro dessa instância, devemos invocar mais uma vez ela para a criação do novo Diretório Virtual e logo após aplicar essa ação.
deVDir.Invoke("AppCreate", 1);
deVDir.CommitChanges();
Se as configurações ocorrem com sucesso o novo Diretório Virtual será criado!
Conclusão
Vimos neste artigo como acessar diretamente o IIS através de código C#, podendo criar e excluir um Diretório Virtual, bem como suas propriedades. É importante citar que não foram exploradas todas as classes desse assembly, existem muitas outras, que podem ser implementadas de acordo com sua necessidade específica. Aproveite as referências listadas abaixo e teste outras possibilidades. Deixe que sua imaginação faça um passeio pelos serviços disponibilizados pelo Active Directory. Fico a disposição para esclarecer dúvidas, inclusive se quiser contribuir com melhorias e dicas, bastam me enviar um e-mail.
Um abraço e até a próxima!
Referências:
- System. DirectoryServices:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdirectoryservices.asp
- Introduction to Active Directory Objects:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconIntroductionToADSIObjectsInVisualStudio.asp
- DirectoryEntry Constructor (String):
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDirectoryServicesDirectoryEntryClassctorTopic2.asp