Na verdade, o .Net faz isso muito bem para nós. A FCL oferece diversas aulas para nos ajudar a realizar este trabalho, tornando nosso trabalho de desenvolvimento muito simples e feliz. A programação para controlar o IIS é na verdade muito simples. Assim como o ASP, o .Net precisa usar ADSI para operar o IIS, mas neste momento não precisamos mais do GetObject, porque o .Net nos fornece coisas novas com funções mais poderosas.
Essas
classes nos permitem operar apenas IIS, LDAP, NDS e WinNT.
falaremos sobre o controle do IIS aqui. De modo geral, quando operamos o IIS, geralmente operamos diretórios virtuais, então listarei isso como o conteúdo principal.
Em primeiro lugar, precisamos entender a estrutura hierárquica do IIS. A seguir está uma imagem que encontrei no exterior, que explica muito bem a estrutura hierárquica do IIS:
[htmChina:Image id=Image1|12][/htmChina:Image]
Para entender a sintaxe de controle do IIS, devemos entender a figura acima e entender a estrutura hierárquica dos metadados do IIS (Metabase). Cada nó no gráfico é chamado de chave, e cada chave pode conter um ou mais valores. Esses valores são o que chamamos de propriedades. A chave nos metadados do IIS é consistente com os elementos do IIS, portanto, os metadados são a configuração do atributo. os valores nos dados afetarão as configurações no IIS. Esta é a ideia básica e o núcleo da nossa programação.
Além disso, você também precisa entender o conceito de Schema. Representa o nome da arquitetura no IIS, ou seja, você pode entender o tipo de chave nos metadados do IIS, especificamente o tipo de cada nó. Sabemos que existem diretórios virtuais, diretórios comuns e arquivos no IIS, e todos esses são elementos do IIS, e o rótulo que os distingue é Esquema. Por exemplo, o esquema do diretório virtual é "IIsVirtualDir" e o diretório normal é "IIsWebDir". Desta forma, quando adicionarmos ou excluirmos diretórios, o IIS saberá se estamos adicionando um diretório virtual ou um diretório normal.
Criar um diretório virtual
DirectoryEntry é um grande presente que o .Net nos dá. Conhecemos sua função apenas pelo nome - entrada de diretório. Qualquer pessoa que já tenha usado ADSI sabe que ao operar IIS e WinNT, também precisamos fornecer seu Caminho. Ao operar o IIS, o formato deste Caminho é:
IIS://ComputerName/Service/Website/Directory
ComputerName: ou seja, o operacional. servidor O nome pode ser um nome ou um IP. O mais comumente usado é localhost.
Serviço: O servidor que é operado Existem serviços Web, FTP e SMTP no IIS. Operamos principalmente a função Web do IIS, então aqui está "W3SVC".
Site: um serviço IIS pode incluir muitos sites. Este é o site usado para configurar operações. Seu valor é um número, o padrão é 1, indicando o site padrão, se houver outros comece em 1 e assim sucessivamente.
Diretório: Escusado será dizer que é o nome do diretório para operação. O diretório superior de um site geralmente é "ROOT", e os outros diretórios são seus filhos.
Primeiro, obtemos o diretório de nível superior (diretório raiz) de um site:
rootfolder
= new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
que este diretório é real existe.
Vamos adicionar um novo diretório virtual. Por exemplo, queremos adicionar "Aspcn":
DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn", "IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
pasta raiz.CommitChanges();
A ideia de criar um diretório é muito simples, ou seja, adicionar outro registro a um subconjunto do diretório raiz (rootfolder.Children). O método Add na classe DirectoryEntries é usado aqui. diretório recém-adicionado. Um parâmetro é o nome do diretório virtual e o segundo é o nome da classe do esquema para indicar o tipo de diretório que adicionamos. Em seguida, use o método Invoke de DirectoryEntry para chamar o método "AppCreate" no ADSI para realmente criar o diretório (parece que o diretório pode ser criado com sucesso sem realizar esta etapa, mas por uma questão de segurança, todos deveriam usá-lo) e finalmente chame o novo, O método CommitChanges do diretório raiz confirma esta operação.
Ao criar um novo diretório, também podemos atribuir valores aos atributos deste diretório ao mesmo tempo, mas minha experiência prática me diz que é melhor não fazer isso se atribuirmos valores ao criar um novo diretório. , haverá muitos atributos que não podem ser atribuídos com sucesso. Por exemplo, os importantes representam o verdadeiro atributo Path do diretório. Portanto, Feidao recomenda que você primeiro crie o diretório e depois atribua valores, ou seja, atualize as informações do diretório.
Atualize o diretório virtual
. Acredito que todos estejam familiarizados com o IIS e entendam algumas configurações importantes do IIS, como legível (AccessRead), gravável (AccessWrite), executável (AccessExecute), etc. Isso pode ser alcançado atribuindo valores à coleção de propriedades Properties de DirectoryEntry. A atribuição pode ser feita de duas maneiras:
a primeira é chamar o método Add da coleção Properties, como:
dir.Properties["AccessRead
"].Add(true);
:
dir. Properties["AccessRead"][0] = true
; Depende da sua preferência.
Antes de atribuir um valor, ainda precisamos determinar o alvo a ser atribuído:) Aqui usamos o método Find da classe DirectoryEntries, como:
DirectoryEntry
de = rootfolder.Children.Find("Aspcn", "IIsVirtualDir");
encontrado, estamos prontos para a atribuição. Certifique-se de dar uma boa olhada ao atribuir valores. Pode haver muitos valores de atributos em um diretório virtual e você pode verificar muitos deles. . : (Existem muitos, e não vou repeti-los. Você pode verificá-los no site da Microsoft:)
Os
mais comumente usados são: AccessRead, AccessWrite, AccessExecute, AccessScript, DefaultDoc, EnableDefaultDoc, Path
. diretório virtual também é muito simples, basta encontrar o diretório virtual que deseja excluir e chamar o método AppDelete.
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
pasta raiz.CommitChanges();
Outro método é chamar o método Delete do diretório raiz.
objeto[] paras = novo objeto[2];
paras[0] = "IIsWebVirtualDir" //Indica que a operação é um diretório virtual
paras[1] = "Aspcn";
rootfolder.Invoke("Excluir",paras);
pasta raiz.CommitChanges();