Ir al contenido



Foto

Como crear un Directorio Virtual en el IIS con Delphi Win32


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.012 mensajes
  • LocationMéxico

Escrito 26 mayo 2009 - 01:14

  • índice
    


    #indice0
    


    #indice1
    


    #indice2
    


    #indice3
    

     


    Introducción
    

    #indice
    

     

    A partir de los tutoriales sobre como consumir un Web Service, noté que hay muchas dudas sobre como crear el directorio virtual, por esta razón me dedique a buscar información para realizar esto desde una aplicación Delphi.

    Pues bien, encontré que podemos realizar esto usando la Biblioteca virtualds.tlb que se encuentra en el directorio System32 de Windows.

    Esta biblioteca llamada Active Directory Services (Active DS) nos permite administrar y mantener todos los recursos de red desde una única ubicación y una de las caracterí­sticas es que no solo nos sirve para administrar el IIS, sino para muchas otras aplicaciones como LDAP por ejemplo, en posteriores tutoriales intentaré hablar sobre otras funcionalidades de esta biblioteca.

    Nota: Active Directory es una caracterí­stica en Windows 2000, XP y Vista, y no está disponible para Windows 95, Windows 98, Windows Me, Windows NT 4.0, Mac OS, Mac OS X, Unix.

    Les recuerdo que el ambiente de desarrollo con el que trabajo es:

  • Windows XP Professional SP3
  • Turbo Delphi Professional
  • Internet Information Services (IIS) 5.1

Espero que este tutorial sea de ayuda para muchos e invito a todos a publicar los resultados en otros sistemas operativos.

Capí­tulo 1. Crear el proyecto Base

#indice

 

Creamos un nuevo proyecto y agregamos los siguientes componentes:

Componente ----> Propiedad Name

  • TDirectoryListBox ----> dlbIIS
  • TDriveComboBox ----> dcbIIS
  • TEdit ----> edtAlias
  • TLabel ----> Alias
  • TEdit ----> edtPath
  • TLabel ----> Path
  • TGroupBox ----> GroupBox1
  • TCheckBox ----> cbRead
  • TCheckBox ----> cbScript
  • TCheckBox ----> cbExecute
  • TCheckBox ----> cbWrite
  • TCheckBox ----> cbBrowse
  • TBitBtn ----> bbtOK
  • TBitBtn ----> bbtClose

He decidido que la UI se vea de esta forma, ustedes decidan como mejor les parezca.

Imagen Enviada


En el siguiente capitulo veremos como importar esta biblioteca a nuestro proyecto.

Capí­tulo 2. La Biblioteca Active DS

#indice

 

Para importar la biblioteca Active DS, debemos hacer lo siguiente:

Desde el menú de Delphi:

File ---> Component  ---> Import Component  ---> Import a Type Library

Y presionamos Next

Imagen Enviada


Seleccionamos Active DS Type Library desde la lista de bibliotecas registradas y presionamos Next.

Imagen Enviada


En la siguiente pantalla debemos seleccionar la paleta de componentes donde queremos agregar esta biblioteca (he decidido no asignar nunguna en este caso) y asignamos el directorio donde se almacenará el archivo importado, lo he dejado en el valor por omisión que es la carpeta de Imports de Delphi, presionamos Next.

Imagen Enviada


Agrego la unidad al proyecto y como no estoy generando el componente no debemos de instalar el paquete, en otra ocasión veremos como generar el componente para que sea reutilizado.

Imagen Enviada


Presionamos Finish y con eso terminamos el proceso de importación.

Capí­tulo 3. Código para crear Directorio Virtual en el IIS

#indice

 

Ahora vamos a escribir el código que nos permitirá crear directorios virtuales, debo decir que el código lo he tomado de cnblogs.com y me he tomado la libertad de traducir sus comentarios.

Comenzaremos por agregar una función llamada ADsGetObject() de tipo HRESULT y debemos de agregar en el uses la unidad ActiveDs_TLB que importamos en el capí­tulo anterior y su implementación como se muestra a continuación:


delphi
  1. uses  *****, ActiveDs_TLB, *****;
  2.  
  3.  
  4. function ADsGetObject(const PathName: WideString; const GUID:TGUID;
  5.                       out I: IUnknown): HRESULT; stdcall;
  6.  
  7. var
  8.   frmAddVirtualDir: TfrmAddVirtualDir;
  9.  
  10. implementation
  11.  
  12. {$R *.dfm}
  13.  
  14. function ADsGetObject; external 'ActiveDS.dll' name 'ADsGetObject';



Posteriormente agregamos el siguiente código al botón bbtOK (Crear Directorio Virtual).



delphi
  1. procedure TfrmAddVirtualDir.bbtOKClick(Sender: TObject);
  2. var
  3. I: IADsContainer;
  4. ADs: IADs;
  5. begin
  6.   if Length(Trim(edtAlias.Text))=0 then begin
  7.     Application.MessageBox('Alias no puede ser Vacio','Aviso');
  8.     Exit;
  9.   end;
  10.   if Length(Trim(edtPath.Text))=0 then begin
  11.     Application.MessageBox('Seleccione la Ruta del directorio Virtual',
  12.                             'Aviso');
  13.     Exit;
  14.   end;
  15.   if ADsGetObject('IIS://localhost', IID_IADsContainer, IUnknown(I)) = S_Ok then begin
  16.       //IIS Ha sido instalado
  17.     if ADsGetObject('IIS://localhost/w3svc', IID_IADsContainer, IUnknown(I)) = S_Ok then begin
  18.         //Web Server existe
  19.         ADs := IADs(I.GetObject('IIsWebServer', '1'));
  20.         //Acceso a los servicios
  21.         if ADs.QueryInterface(IID_IADsContainer, I) = S_OK then begin
  22.           //Servicios de Apoyo
  23.           ADs := IADs(I.GetObject('IIsWebVirtualDir', 'Root'));
  24.           //En el servidor Web para crear un directorio virtual en la raí­z
  25.           if ADs.QueryInterface(IID_IADsContainer, I) = S_OK then begin
  26.           //Servicios de apoyo
  27.               try
  28.                 ADs := IADs(I.Create('IIsWebVirtualDir', edtAlias.Text));
  29.                 //Crear un directorio virtual para el alias (edtAlias.Text)
  30.               except
  31.                 Application.MessageBox('El alias ya existe, por favor, elija'+
  32.                                       ' otro alias','Aviso');
  33.                 Exit;
  34.               end; //try except
  35.               ADs.Put('AccessRead', cbRead.Checked); //Establecer los parámetros
  36.               ADs.Put('AccessWrite', cbWrite.Checked);
  37.               ADs.put('AccessScript',cbScript.Checked);
  38.               ADs.Put('AccessExecute',cbExecute.Checked);
  39.               ADs.put('EnableDirBrowsing',cbBrowse.Checked);
  40.               ADs.Put('Path', edtPath.text);
  41.               ADs.Put('AppFriendlyName', edtAlias.text);
  42.               ADs.Put('DefaultDoc','Default.asp, Default.html, Default.htm, ndex.asp,'+
  43.                       'Index.html, Index.htm, Home.asp, Home.Html, Home.htm');
  44.               ADs.Put('EnableDefaultDoc',True);//Pueden abrir el archivo por defecto
  45.               ADs.SetInfo; //Guardar parámetros
  46.               Application.MessageBox('Directorio Virtual Creado','Felicidades');
  47.           end;
  48.         end;
  49.     end;
  50.   end else
  51.         Application.MessageBox('IIS no está instalado en su ordenador o'+
  52.                               ' usted no tiene acceso a IIS','Aviso');
  53. end;



Agregamos al evento OnChange del componente TDirectoryListBox ----> dlbIIS el código para asignar al componente Edit (edtPath) la ruta seleccionada.



delphi
  1. procedure TfrmAddVirtualDir.dlbIISChange(Sender: TObject);
  2. begin
  3. edtPath.Text:=dlbIIS.Directory;
  4. end;



Y por último generamos el código para mostrar el directorio actual y el cierre de nuestro programa.



delphi
  1. procedure TfrmAddVirtualDir.FormShow(Sender: TObject);
  2. begin
  3.   edtPath.Text := dlbIIS.Directory;
  4. end;
  5.  
  6. procedure TfrmAddVirtualDir.bbtCloseClick(Sender: TObject);
  7. begin
  8.   Close;
  9. end;



Compilamos y ejecutamos nuestro proyecto y veremos que el directorio virtual ha sido creado en el IIS de nuestra máquina.

Ejecutamos nuestro programa:

Imagen Enviada


Checamos nuestro IIS:

Imagen Enviada


Verificamos las propiedades:

Imagen Enviada


En esta parte de las propiedades, aún no encuentro como crear el punto de Inicio de nuestro Directorio Virtual, como se muestra en la siguiente imagen:

Imagen Enviada


Con esto terminamos este Tutorial, esperando sea de utilidad.

Salud OS

PD. Si alguno de ustedes logra encontrar este procedimiento, le agradecerí­a enormemente publicara la respuesta para complementar este tutorial.

  • 0