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



Há pouco tempo necessitei 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 descobri como fazer isso.

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

Rodrigo S. Donini

Rodrigo S. Donini - Coordenador de desenvolvimento, líder de desenvolvimento nas tecnologias Microsoft, com fortes conhecimentos de client/server/web e metodologias de desenvolvimento.