.Net realmente hace esto muy bien por nosotros. FCL ofrece muchas clases para ayudarnos a completar este trabajo, lo que hace que nuestro trabajo de desarrollo sea muy simple y feliz. La programación para controlar IIS es en realidad muy simple. Al igual que ASP, .Net necesita usar ADSI para operar IIS, pero en este momento ya no necesitamos GetObject, porque .Net nos proporciona cosas nuevas con funciones más potentes.
El espacio de nombres System.DirectoryServices incluye algunas cosas poderosas: DirectoryEntry, DirectoryEntries, que nos brindan funciones poderosas para acceder a Active Directory. Estas clases nos permiten operar IIS, LDAP, NDS y WinNT :)
Sin embargo, solo
.Hablaremos sobre el control de IIS aquí. En términos generales, cuando operamos IIS, generalmente operamos directorios virtuales, por lo que enumeraré esto como el contenido principal.
En primer lugar, debemos comprender la estructura jerárquica de IIS. La siguiente es una imagen que encontré en el extranjero, que explica muy bien la estructura jerárquica de IIS:
[htmChina:Image id=Image1|12][/htmChina:Image].
Para comprender la sintaxis de control de IIS, debemos comprender la figura anterior y comprender la estructura jerárquica de los metadatos de IIS (Metabase). Cada nodo en el gráfico se llama Clave, y cada Clave puede contener uno o más valores. Estos valores son lo que llamamos propiedades. La clave en los metadatos de IIS es consistente con los elementos en IIS, por lo que los metadatos La configuración del atributo. Los valores en los datos afectarán la configuración en IIS. Esta es la idea básica y el núcleo de nuestra programación.
Además, también es necesario comprender el concepto de esquema. Representa el nombre de la arquitectura en IIS, es decir, se puede entender el tipo de Clave en los metadatos de IIS, específicamente el tipo de cada nodo. Sabemos que hay directorios virtuales, directorios ordinarios y archivos en IIS, y todos estos son elementos de IIS, y la etiqueta que los distingue es Esquema. Por ejemplo, el esquema del directorio virtual es "IIsVirtualDir" y el directorio normal es "IIsWebDir". De esta forma, cuando agregamos o eliminamos directorios, IIS sabrá si estamos agregando un directorio virtual o un directorio normal.
Crear un directorio virtual
DirectoryEntry es un gran regalo que nos brinda .Net. Conocemos su función solo por su nombre: entrada de directorio. Cualquiera que haya usado ADSI sabe que cuando operamos IIS y WinNT, también debemos proporcionar su ruta. Cuando operamos IIS, el formato de esta ruta es:
IIS://NombreEquipo/Servicio/Sitio web/Directorio
NombreEquipo: es decir, el sistema operativo. server El nombre puede ser un nombre o una IP. El más utilizado es localhost.
Servicio: el servidor que se opera Hay servicios web, FTP y SMTP en IIS. Operamos principalmente la función web de IIS, por lo que aquí está "W3SVC".
Sitio web: un servicio IIS puede incluir muchos sitios. Este es el sitio utilizado para configurar las operaciones. Su valor es un número, el predeterminado es 1, indica el sitio predeterminado, si hay otros, comienza desde 1 y así sucesivamente.
Directorio: No hace falta decir que es el nombre del directorio operativo. El directorio superior de un sitio generalmente es "ROOT" y los demás directorios son sus hijos.
Primero, obtenemos el directorio de nivel superior (directorio raíz) de un sitio:
rootfolder
= new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
que este directorio existe realmente.
Agreguemos un nuevo directorio virtual. Por ejemplo, queremos agregar "Aspcn":
DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn", "IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
carpeta raíz.CommitChanges();
La idea de crear un directorio es muy simple, es decir, agregar otro registro a un subconjunto del directorio raíz (rootfolder.Children). Aquí se usa el método Add en la clase DirectoryEntries. Devuelve un DirectoryEntry, que representa el. directorio recién agregado. Un parámetro es el nombre del directorio virtual y el segundo es el nombre de clase del esquema para indicar el tipo de directorio que agregamos. Luego use el método Invoke de DirectoryEntry para llamar al método "AppCreate" en ADSI para crear realmente el directorio (parece que el directorio se puede crear exitosamente sin realizar este paso, pero por razones de seguridad, todos deberían usarlo), y Finalmente llame al nuevo. El método CommitChanges del directorio raíz confirma esta operación.
Al crear un nuevo directorio, también podemos asignar valores a los atributos de este directorio al mismo tiempo, pero mi experiencia práctica me dice que es mejor no hacer esto si asignamos valores al crear un nuevo directorio. , habrá muchos atributos que no se podrán asignar correctamente. Por ejemplo, los importantes representan true El atributo de ruta del directorio. Por lo tanto, Feidao recomienda crear el directorio primero y luego asignar valores, es decir, actualizar la información del directorio.
Actualice el directorio virtual
. Creo que todos están familiarizados con IIS y comprenden algunas configuraciones importantes en IIS, como legible (AccessRead), escribible (AccessWrite), ejecutable (AccessExecute), etc. Esto se puede lograr asignando valores a la colección de propiedades Propiedades de DirectoryEntry. La asignación se puede realizar de dos maneras:
la primera es llamar al método Agregar de la colección Propiedades, como por ejemplo:
dir.Properties["AccessRead"].Add(true);
la segunda es asignar un valor al primer valor del índice; :
dir. Properties["AccessRead"][0] = verdadero
Ambos métodos son posibles. Depende de tu preferencia.
Antes de asignar un valor, todavía necesitamos determinar el objetivo a asignar :) Aquí usamos el método Find de la clase DirectoryEntries, como por ejemplo:
DirectoryEntry
de = rootfolder.Children.Find("Aspcn", "IIsVirtualDir");
encontrado, estamos listos para la asignación. Asegúrese de prestar atención al asignar valores. Puede haber muchos valores de atributos en un directorio virtual y puede verificar muchos de ellos. . : (Hay demasiados y no los repetiré. Puede consultarlos en el sitio web de Microsoft :)
Los más utilizados son: AccessRead, AccessWrite, AccessExecute, AccessScript, DefaultDoc, EnableDefaultDoc, Path
El método paraeliminar
un. El directorio virtual también es muy simple: simplemente busque el directorio virtual que desea eliminar y luego llame al método AppDelete.
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",true);
carpeta raíz.CommitChanges();
Otro método es llamar al método Eliminar del directorio raíz.
objeto[] paras = nuevo objeto[2];
paras[0] = "IIsWebVirtualDir"; //Indica que la operación es un directorio virtual
párrafos[1] = "Aspcn";
rootfolder.Invoke("Eliminar",paras);
carpeta raíz.CommitChanges();