Ir al contenido


Foto

Pasar parametro de .ini a HTTPRIO


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

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 24 agosto 2014 - 07:47

Tengo un archivo.INI con los parametros de conexion, pero como estoy utilizando un webservice, utilizo el WSDL importer, que crea un .pas que llama a un HTTPRIO, pero queria psar yo manualmente uno propio.

Porque si cambia el ip por ejemplo del servicio(por lo que fuese dentro de la empresa), no quiero tener que volver a compilar todo el software.



delphi
  1. procedure TForm2.FormCreate(Sender: TObject);
  2. var
  3. ip,puerto,user,pass,def:string;
  4. inifile:TIniFile;
  5.  
  6. begin
  7.     inifile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'suc.ini');
  8.     ip:=inifile.ReadString('ip','Path','');
  9.     puerto:=inifile.ReadString('puerto','Path','');
  10.     user:=inifile.ReadString('user','Path','');
  11.     pass:=inifile.ReadString('pass','Path','');
  12.     def:='http://'+ ip + ':' + puerto + '/wsdl/Isucursales';
  13.     with HTTPRIO1 do
  14.       begin
  15.         WSDLLocation:=def;
  16.         Service:='Isucursallaferreteraservice';
  17.         Port:='Isucursallaferreteraport';
  18.       end;
  19.  
  20.  
  21.     Isucursales1.GetIsucursales(true,def,HTTPRIO1);
  22. end;




Como veran en este codigo tomo parametros y se los asigno a un componente que arrastre.

La aplicacion se inicia correctamente pero no utiliza el .ini mio, supongo esta usando el de el.pas

SAludos
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 24 agosto 2014 - 11:41

No soy experto en servicios web, pero todo apunta en que los parámetros de conexión los sobre-escribe desde otra fuente mucho después de la creación del form (FormCreate), por lo tanto debes interceptar directamente algún evento del propio componente de conexión, algo así como OnBeforeConnect o su equivalente, para pasarle tus parámetros.

Un cordial saludo.
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 24 agosto 2014 - 01:23

Hola

Te paso un extracto de un tutorial de webservices que publiqué ya hace unos años, ésto lo hago en el archivo .PAS que genera el WSDL Importer.



delphi
  1. implementation
  2.  
  3. uses SysUtils, IniFiles, Forms;
  4.  
  5. var
  6.   IniFile: TIniFile;
  7.   defWSDL,defURL : widestring; //Extraemos estas constantes para convertirlas
  8.                               //en variables y poder manipularlas en "runtime"
  9.  
  10. function GetIwsClientes(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IwsClientes;
  11. const
  12.   defSvc  = 'IwsClientesservice';
  13.   defPrt  = 'IwsClientesPort';
  14. var
  15.   RIO: THTTPRIO;
  16. begin
  17.   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'conf.ini');
  18.   defWSDL := IniFile.ReadString('CONFIGURACION','WSDL','');
  19.   defURL  := IniFile.ReadString('CONFIGURACION','URL','');
  20.   IniFile.Free;
  21.   Result := nil;
  22.   if (Addr = '') then
  23.   begin
  24.     if UseWSDL then
  25.       Addr := defWSDL
  26.     else
  27.       Addr := defURL;
  28.   end;
  29.   if HTTPRIO = nil then
  30.     RIO := THTTPRIO.Create(nil)
  31.   else
  32.     RIO := HTTPRIO;
  33.   try
  34.     Result := (RIO as IwsClientes);
  35.     if UseWSDL then
  36.     begin
  37.       RIO.WSDLLocation := Addr;
  38.       RIO.Service := defSvc;
  39.       RIO.Port := defPrt;
  40.     end else
  41.       RIO.URL := Addr;
  42.   finally
  43.     if (Result = nil) and (HTTPRIO = nil) then
  44.       RIO.Free;
  45.   end;
  46. end;



Para que esto funcione correctamente necesitaremos crear un Archivo INI de nombre conf.ini en el directorio de nuestra aplicación y deberá contener lo siguiente:



delphi
  1. [CONFIGURACION]
  2. WSDL="http://localhost/WSClientes/WSClientes.dll/wsdl/IwsClientes"
  3. URL="http://localhost/WSClientes/WSClientes.dll/soap/IwsClientes"



Con eso solucionas tu problema.

Saludos
  • 0

#4 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 25 agosto 2014 - 10:04

Hola

Te paso un extracto de un tutorial de webservices que publiqué ya hace unos años, ésto lo hago en el archivo .PAS que genera el WSDL Importer.



delphi
  1. implementation
  2.  
  3. uses SysUtils, IniFiles, Forms;
  4.  
  5. var
  6.   IniFile: TIniFile;
  7.   defWSDL,defURL : widestring; //Extraemos estas constantes para convertirlas
  8.                               //en variables y poder manipularlas en "runtime"
  9.  
  10. function GetIwsClientes(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IwsClientes;
  11. const
  12.   defSvc  = 'IwsClientesservice';
  13.   defPrt  = 'IwsClientesPort';
  14. var
  15.   RIO: THTTPRIO;
  16. begin
  17.   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'conf.ini');
  18.   defWSDL := IniFile.ReadString('CONFIGURACION','WSDL','');
  19.   defURL  := IniFile.ReadString('CONFIGURACION','URL','');
  20.   IniFile.Free;
  21.   Result := nil;
  22.   if (Addr = '') then
  23.   begin
  24.     if UseWSDL then
  25.       Addr := defWSDL
  26.     else
  27.       Addr := defURL;
  28.   end;
  29.   if HTTPRIO = nil then
  30.     RIO := THTTPRIO.Create(nil)
  31.   else
  32.     RIO := HTTPRIO;
  33.   try
  34.     Result := (RIO as IwsClientes);
  35.     if UseWSDL then
  36.     begin
  37.       RIO.WSDLLocation := Addr;
  38.       RIO.Service := defSvc;
  39.       RIO.Port := defPrt;
  40.     end else
  41.       RIO.URL := Addr;
  42.   finally
  43.     if (Result = nil) and (HTTPRIO = nil) then
  44.       RIO.Free;
  45.   end;
  46. end;



Para que esto funcione correctamente necesitaremos crear un Archivo INI de nombre conf.ini en el directorio de nuestra aplicación y deberá contener lo siguiente:



delphi
  1. [CONFIGURACION]
  2. WSDL="http://localhost/WSClientes/WSClientes.dll/wsdl/IwsClientes"
  3. URL="http://localhost/WSClientes/WSClientes.dll/soap/IwsClientes"



Con eso solucionas tu problema.

Saludos


Muchas gracias @egostar, lo unico que faltaria seria comprobar todo antes de ejecutar el programa. Y no que de error al llamar al server. Quizas con un TSOAPConnection lo logre
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.469 mensajes
  • LocationMéxico

Escrito 25 agosto 2014 - 10:20

Hola

Si sigues los pasos que tiene el pequeño tutorial, no debería haber problema para acceder al servicio web, a menos claro que se tenga un problema con la URL, en todo caso el mismo sistema te enviará una excepción de que no existe o no está disponible el servicio web.

Saludos
  • 0

#6 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 25 agosto 2014 - 10:31

Pues me da un error: La propiedad wsdl o url no ha sido seteada... probe quitar el archivo ini y no me avisa que no existe es como si no lo esta tomando?:



delphi
  1. [SERVIDORSUCURSAL]
  2. WSDL="http://localhost/wsdl/Isucursales"
  3. URL="http://localhost/soap/Isucursales"





delphi
  1. function GetIsucursales(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): Isucursales;
  2. const
  3.   defSvc  = 'Isucursalesservice';
  4.   defPrt  = 'IsucursalesPort';
  5. var
  6.   RIO: THTTPRIO;
  7.  
  8. begin
  9.  
  10.  
  11.     inifile:=TIniFile.Create(ExtractFilePath((Application.ExeName) + 'suc.ini'));
  12.       defWSDL:=inifile.ReadString('SERVIDORSUCURSAL','WSDL','');
  13.       defURL:=inifile.ReadString('SERVIDORSUCURSAL','URL','');
  14.       inifile.Free;
  15.       Result:=nil;
  16.       if (Addr = '') then
  17.         begin
  18.           if UseWSDL then
  19.             Addr := defWSDL
  20.           else
  21.             Addr := defURL;
  22.         end;
  23.       if HTTPRIO = nil then
  24.         RIO := THTTPRIO.Create(nil)
  25.       else
  26.         RIO := HTTPRIO;
  27.   try
  28.     Result := (RIO as Isucursales);
  29.     if UseWSDL then
  30.     begin
  31.       RIO.WSDLLocation := Addr;
  32.       RIO.Service := defSvc;
  33.       RIO.Port := defPrt;
  34.     end else
  35.       RIO.URL := Addr;
  36.   finally
  37.     if (Result = nil) and (HTTPRIO = nil) then
  38.       RIO.Free;
  39.   end;
  40. end;


  • 0

#7 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 mensajes

Escrito 25 agosto 2014 - 10:39

Hay un parentesis de mas en la linea 17, perdon ... :grin:
  • 0




IP.Board spam blocked by CleanTalk.