OT: Publicar Web Service desde VFP 9 SP2

2,490 views
Skip to first unread message

Guillermo Gimenez

unread,
Jan 17, 2013, 1:51:40 PM1/17/13
to VFP Grupo
Estamos intentando publicar un servicio web en el servidor de la oficina para las bocas de cobranzas, para que puedan consultar saldos y realizar cobros de las cuentas de los clientes de la empresa. El problema es que en mi maquinita de desarrollo (notebook con WinXP) todo funciona de lujo (hasta puedo "consumir" el servicio), pero cuando quiero publicarlo en el servidor (Windows Server 2003 con IIS y SOAP instalados), el wizard de VFP me arroja el siguiente mensaje:

Registered: There was a problem accessing the Listener URI specified for the WSDL file.

Google no ayuda mucho que digamos y Microsoft habla de un monton de configuración de dominio y directivas de seguridad y no se que, que ya me mareó. Si a alguno de ustedes se encontró con este problema y lo pudo solucionar, me podría dar un mano. Ya llevo unos cuantos días peleandome con esto. Muchas gracias.

Saludos desde Py.

Guille

andres recio

unread,
Jan 17, 2013, 2:08:31 PM1/17/13
to publice...@googlegroups.com
yo tengo un problema q es sobre el tema a ver si me podes ayudar........ necesito consumir un servicio, el cual no hice y tengo solo algunos datos de lo q hace.......el tema esta en que todavia no pude llegar hasta el servicio. desde ya muchas gracias.-

--
 
 

Douglas Sánchez

unread,
Jan 17, 2013, 9:39:34 PM1/17/13
to publice...@googlegroups.com
Hola, yo le recomiendo que si no usan .net contraten o estudien, para que mejor el servicios que tengan en .net lo consuman desde vfp y no sea necesario publicarlos si gustan ejemplo estoy a la orden.

Saludes.

Douglas


--
 
 



--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Claro: 505 88495476

Jorge Montúfar

unread,
Jan 18, 2013, 11:25:07 AM1/18/13
to publice...@googlegroups.com
buenos dias yo estaria interesado en un ejemplo, gracias


--
 
 

andres recio

unread,
Jan 18, 2013, 11:26:41 AM1/18/13
to publice...@googlegroups.com
por favor duglas me urge un ejemplo

--
 
 

Fox Friend

unread,
Jan 18, 2013, 12:17:25 PM1/18/13
to publice...@googlegroups.com
Douglas,

Me interesa el ejemplo en VB.NET de preferencia. C# es bonito, pero simplemente paso jeje..

Jairo Miranda

unread,
Jan 18, 2013, 2:33:54 PM1/18/13
to publice...@googlegroups.com

ActiveVfp de codefox

 

JM

--
 
 

Guillermo Gimenez

unread,
Jan 22, 2013, 4:52:52 PM1/22/13
to publice...@googlegroups.com
Avance con el tema de publicar el servicio web en el servidor con Windows Server 2003, puedo ver el xml (generado por Soap "wsdl") desde el Internet Explorer. El problema es que cuando quiero consumirlo (desde VFP) me da el siguiente mensaje de error, cuando llamo a una función que tiene la clase:

OLE IDispatch exception code 0 from Connector: Connector:Connection time out. HRESULT=0x800A1527 - Client:An unanticipated error occurred during the processing of this request. HRESULT=0x800A1527 - Client:Sending the Soap message failed or no recognizable response was received HRESULT=0x800A1527 - Client:Unspecified client error. HRESULT=0x800A1527..

Si alguien se encontro con este error y logro solucionarlo, por favor, hechele una manito a este humilde programador de VFP... que no duerme hace unos días por "esta cosa"... desde ya muchas gracias amigos, yo seguire buscando la solución, hasta pronto

Saludos desde Py
Guille

--- El jue 17-ene-13, andres recio <andres...@gmail.com> escribió:

De: andres recio <andres...@gmail.com>
Asunto: Re: [vfp] OT: Publicar Web Service desde VFP 9 SP2
--
 
 

Fernando D. Bozzo

unread,
Jan 24, 2013, 2:53:28 PM1/24/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Guillermo, no te recomiendo usar el Soap Toolkit, primero porque ya no está más soportado por Microsoft, y segundo porque da muchos problemas.
En vez de eso hay otra forma bastante sencilla, que consiste en manejar el acceso Soap a bajo nivel, o sea, conectándose al servicio y enviando directamente el XML con las cabeceras Soap al servicio en cuestión.

Antes de hacer lo siguiente, te recomiendo bajarte la herramienta gratuita SoapUI ( http://www.soapui.org/ ), ojo, no la PRO que es de pago, sino la normal.

Luego de descargarte SoapUI, instalarlo y crear un nuevo proyecto indicando la URL de tu webservice (el archivo WSDL) para probar el servicio que querés acceder y de lograr que te devuelva algo que no sea un error (si no, no sigas hasta lograr que funcione tu servicio!), entonces podrías probar intentando adaptar este código (necesitás tener instalado el MSXML3 y MSXML4) tomando como ejemplo lo que te genera el SoapUI y adaptándolo a este ejemplo:

#DEFINE SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS    13056

loXmlHttp        = CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")
loXMLBody        = CREATEOBJECT("MSXML2.DOMDocument.6.0")
lcURL   = "http://direccion-web-a-tu-webservice.wsdl"

TEXT TO lcEnvioXML TEXTMERGE NOSHOW FLAGS 1 PRETEXT 1+2+4+8
<soapenv:Envelope xmlns:arq="http://parte-de-la-url" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <arq:tuProcedimientoALlamar>
            <El-XML-a-enviar-al-procedimiento>
        </arq:tuProcedimientoALlamar>
    </soapenv:Body>
</soapenv:Envelope>
ENDTEXT

IF NOT loXMLBody.loadXML( lcEnvioXML )
    ERROR loXMLBody.parseError.reason
ENDIF


loXmlHttp.OPEN( "POST", lcURL, .F., lcUser, lcPwd )
loXmlHttp.setRequestHeader( "Accept-Encoding", "gzip,deflate" )
loXmlHttp.setRequestHeader( "Content-Type", "text/xml" )
*loXmlHttp.setRequestHeader( "Content-Type", "text/xml;charset=ISO-8859-1" )
loXmlHttp.setRequestHeader( "Content-Length", LEN(lcEnvioXML) )
loXmlHttp.setRequestHeader( "soapAction", "sendMailProcessBasica" )
loXmlHttp.setOption( 2, SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS )
         
loXmlHttp.SEND( loXMLBody.documentElement.XML )
         
IF loXmlHttp.status # 200
    ERROR (NVL(loXmlHttp.responseText,''))
ENDIF

*-- Aquí se lee el contenido del XML de la propiedad "loXmlHttp.responseText"



Fox Friend

unread,
Jan 24, 2013, 5:01:27 PM1/24/13
to publice...@googlegroups.com
Ing. Fernando D. Bozzo,

Esta información sobre WS parece muy importante. Talvez sería buena idea ponerla en portalfox.

Saludos!

Fernando D. Bozzo

unread,
Jan 24, 2013, 5:09:01 PM1/24/13
to publice...@googlegroups.com
Me extrañaría que en PortalFox no haya algo de esto ya :-)  aunque si no hubiera, si me puedo hacer algo de tiempo lo envío, pero así como está no es digno de ser publicado en PortalFox :-)

Gracias.-

Fernando D. Bozzo

unread,
Jan 24, 2013, 5:17:18 PM1/24/13
to publice...@googlegroups.com
Pues como decía, hice una búsqueda rápida en PortalFox de "XmlHttp" y encontré 4 resultados, así que allí hay más metarial :-)

Saludos!

Baltazar Moreno

unread,
Jan 24, 2013, 6:43:55 PM1/24/13
to publice...@googlegroups.com
http://www.portalfox.com/article.php?sid=2748

Saludos!

Baltazar Moreno
http://disxii.com
VFP9SP2 - Win7
Guadalajara, Jalisco, México

Pablo Daniel Lissa

unread,
Jan 25, 2013, 7:02:20 AM1/25/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Guillermo:

Yo también pasé por esos dolores de cabeza. Cuando tuve ese error en dos implementaciones distintas, fue por dos causas: En una, no tenía definido el intérprete para WSDL, y en otra, el archivo WSDL referenciaba incorrectamente al servidor.

- Puede ser necesario indicar qué módulo se encargará de interpretar los XML recibidos en los Servicios de IIS, desde las Herramientas Administrativas del Panel de Control. Esto se hace desde las propiedades de alguno de los directorios virtuales (menú contextual), en la pestaña Directorio Virtual, sección Configuración de la Aplicación. Hay un botón Configuración que muestra un cuadro de diálogo con una lista de aplicaciones que interpretan extensiones de archivo definidas. Si no está la extensión .wsdl hay que agregarla como indica el instructivo excepto que, por un error del la aplicación de Administración de IIS es necesario ingresar la ruta a SOAPIS30.dll con formato MS-DOS, es decir, por ejemplo, c:\Archiv~1\Archiv~1\MSSOAP\Binaries\SOAPIS30.dll (nombres de 8 caracteres).

- Se debe tener en cuenta al momento de definir el archivo de definición del Web Service (WSDL) el servidor que se define. Es posible utilizar localhost, pero funcionaría solamente para la máquina local. Se debe recordar que ese archivo se distribuye entre los clientes, por lo que localhost cambia de definición, según el equipo que lo utilice. Lo más correcto es, una vez hechas las pruebas locales necesarias, cambiar las referencias a localhost en el archivo wsdl por la dirección IP del equipo servidor, o por el nombre del mismo.


Te recomendaría dos cosas más para probar:
1- Verificar que el método al que invocas esté libre de errores. Yo implemento siempre algún método que devuelva "OK" para saber si la comunicación con el servicio es correcta.
2- Verificar que la cantidad de resultados devueltos no sea excesivamente grande.


Espero que tengas suerte.
Saludos.

Guillermo Gimenez

unread,
Jan 25, 2013, 7:04:11 PM1/25/13
to publice...@googlegroups.com
Estimado Pablo, siempre es un gusto leer tus respuestas. Muy agradecido por los datos que me pasaste. He avanzado mucho, aunque estos últimos días estuve con otra cosa. Ya puedo conectarme al servicio, pero cuando llamo a la función de la clase me da un error de Acceso Denegado, no le dedique mucho tiempo, pero creo que mañana (sabado) seguire en ellos. Muy agradecido por tus comentarios y voy a tener en cuenta todo. Muchas gracias.

Saludos desde Py
Guille

--- El vie 25-ene-13, Pablo Daniel Lissa <pablo.dan...@gmail.com> escribió:

De: Pablo Daniel Lissa <pablo.dan...@gmail.com>
Asunto: Re: [vfp] OT: Publicar Web Service desde VFP 9 SP2
Para: publice...@googlegroups.com
--
 
 

Guillermo Gimenez

unread,
Jan 28, 2013, 9:11:19 PM1/28/13
to publice...@googlegroups.com
Cumplo en informar que después de "descansar" el fin de semana, hoy lunes volví a la dura lucha con la "Publicación de Servicios Web desde VFP 9 SP2 en Windows Server 2003" y pude (por fin!) dar en el clavo y levantar el servicio web de prueba. Debo reconocer que no fue NADA fácil y también gritar bien fuerte: NO USEN EL ASISTENTE DE PUBLICACION DE WEB SERVICE DE VFP!!!! (Acaso alguien usa algún asistente de VFP)... Mas vale hacerlo "a pulso" con no mas de 30 clicks y 25 tecleadas... Hice el test en mi Server 2003 local (Virtual PC) y en el servidor (gracias a Terminal Service) donde finalmente va a "radicar" el web service y funciona super bien. Un abrazo y gracias a todos los que se preocuparon y de alguna u otra manera me ayudaron en esta ardua tarea...
Despues de muuuuuuucho pelear y pelear les dejo la "recomendación" que "abrió las puertas".

Hace poco use este documento que algún colega envio a la lista:
>>
>> Publicar un web service en su servidor con Windows 2003
>> Si tenes en cuenta los siguentes puntos no deberias tener inconveniente en
>> publicar un web service en su servidor con Windows 2003:
>> - Tener correctamente instalado SOAP Toolkit 3.0.
>> - Incluir en el runtime de Visual FoxPro a instalar en el server la dll
>> necesaria para correr una dll en COM+.
>> - Al publicar el componente en COM+ agregarle el usuario Todos al usuario
>> Owner en las funciones.
>> - Habilitar las extensiones en el IIS que de modo predeterminado estan
>> deshabilitadas.
>> - Crear un directorio virtual en su sitio web indicando que se van a
>> ejecutar secuencias de comandos (ISAPI / CGI)
>> - En la ventana de propiedades del directorio virtual verificar que exista
>> la configuracion ".WSDL" para los verbos "GET,POST", si no existe agregarla
>> asociandola al archivo "SOAPIS30.dll"
>> - Una vez hecho todo esto, verificar que se puede acceder sin
>> inconvenientes al archivo WSDL publicado desde una pc externa al a red.
>>
>>
>> Saludos
>>
>> José


pd: No se quien (caraj...) es José, pero si lo tengo en frente, le doy un BESO!!!. (y soy bien macho
 caraj...)

Pablo Daniel Lissa

unread,
Jan 29, 2013, 7:00:37 AM1/29/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Guillermo:

Me alegro que hayas solucionado tu problema. Concuerdo con lo que decís, yo tampoco uso el asistente de publicación de web services, prefiero configurar directamente el servidor web. Lo que sí uso es la generación del WSDL.

No lo nombré antes porque noté que estabas muy avanzado con la implementación, pero, para quien lo necesite y le sirva, les recomiendo el artículo:
    http://www.portalfox.com/index.php?name=News&file=article&sid=1074&mode=nested&order=0&thold=0

Saludos.

Lenin Avila

unread,
May 6, 2013, 6:50:54 PM5/6/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Fernando,

Un gusto saludarte, tengo un inconveniente, estuve probando gracias a este ejemplo y uno que encontré en portalfox, http://www.portalfox.com/index.php?name=News&file=article&sid=2748&mode=nested&order=0&thold=0, con el ejemplo funciona perfecto. 

El inconveniente que tengo es que el Web Service que quiero consumir es algo diferente. Está hecho en PHP. He intentado usarlo de la misma forma pero tengo errores código 500 (de servidor), haciendo pruebas con SOAPUI si me da resultado.

Si tienes alguna idea, de antemano te quedo muy agradecido.

El servicio que pretendo consumir es: 

El código que estoy usando es: (Copiado originalmente del que está en portalfox) 



lcRespuesta = oWS.nombreCedulaRegistroCivil("1713027611",0,0,'','','','')

IF oWS.iStatus != 0
MESSAGEBOX(oWS.sError,16,"Error al ejecutar WS")
ELSE
MESSAGEBOX(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")
ENDIF  



DEFINE CLASS VFP_WebService AS CUSTOM

* --- Definimos las propiedades ---
sError = ""
iStatus = 0
sURL_WS = ""

* --- Definimos la función del WebService ---
FUNCTION nombreCedulaRegistroCivil(tcCedula, tiNumero1, tiNumero2, tcCadena1, tcCadena2, tcCadena3, tcCadena4)

* --- Paso 1. Creo el XML Request ---
sXMLRequest = this.CreaRequest(tcCedula, tiNumero1, tiNumero2, tcCadena1, tcCadena2, tcCadena3, tcCadena4)
pXMLResponse = ADDBS(SYS(2023)) + SYS(2015) + [.xml]
* --- Paso 2. Ejecuto el WS | Paso 3. Obtengo el Response ---
this.iStatus =  this.EjecutaWS( this.sURL_WS, sXMLRequest , pXMLResponse )

IF this.iStatus != 0  && Ocurrió un error el cual está especificado en sError.
RETURN ""
ENDIF

sXMLResponse = FILETOSTR(pXMLResponse)
* --- Parseamos el XML Response ---
* --- Para el ejemplo está así, manejando texto, ustedes deben manejar XML (falta de tiempo, perdón) ---

sRespuestaWS = "return1:"+CHR(9)+ STREXTRACT(sXMLResponse,'&lt;return&gt;','&lt;/return&gt;')+CHR(13)+CHR(10)
this.borraArchivo(pXMLResponse)
RETURN sRespuestaWS
ENDFUNC 
*---------------------------------------------------
FUNCTION EjecutaWS(pURL_WSDL, pFileRequest , pFileResponse )
*---------------------------------------------------
  TRY 
  susp
   oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
   oHTTP.OPEN("POST", pURL_WSDL, .F.)
   oHTTP.setRequestHeader("User-Agent", "EjecutandoWS desde VFP - PortalFOX")
   oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
   oHTTP.SEND(pFileRequest)
  CATCH TO loErr
  this.sError = "Error: " + TRANSFORM(loErr.ErrorNo) +  " Mensaje: " + loErr.Message
  this.iStatus = -1  
  ENDTRY 
  IF this.iStatus != 0
  RETURN -1
  ENDIF 
   * --- Si el status es diferente a 200, ocurrió algún error de conectividad con el WS ---
   IF oHTTP.STATUS = 200
       RespuestaWS = oHTTP.responseText
   * --- Se genera el XML del response | Este es el paso 3!! ---
   STRTOFILE(STRCONV(RespuestaWS,9),pXMLResponse)
   this.iStatus = 0
   this.sError = ""
   RETURN 0
   ELSE
       this.sError = "Error: No se logró la conexión con el Web Service."+ CHR(13)+;
         "Código: " + TRANSFORM(oHTTP.STATUS)
       this.iStatus = -1
RETURN -1
   ENDIF
ENDFUNC 
*---------------------------------------------------

*---------------------------------------------------
FUNCTION CreaRequest(tcCedula, tiNumero1, tiNumero2, tcCadena1, tcCadena2, tcCadena3, tcCadena4)
*---------------------------------------------------
TEXT TO sXMLRequest TEXTMERGE NOSHOW 
   <SOAP-ENV:Body>
      <web:nombreCedulaRegistroCivil soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<arg0 xsi:type="xsd:string"><<tcCedula>></arg0>
         <arg1 xsi:type="xsd:int">tiNumero1</arg1>
         <arg2 xsi:type="xsd:int">tiNumero2</arg2>
         <arg3 xsi:type="xsd:string">tcCadena1</arg3>
         <arg4 xsi:type="xsd:string">tcCadena2</arg4>
         <arg5 xsi:type="xsd:string">tcCadena3</arg5>
         <arg6 xsi:type="xsd:string">tcCadena4</arg6>
      </web:nombreCedulaRegistroCivil>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
ENDTEXT 
RETURN sXMLRequest
ENDFUNC
*---------------------------------------------------

*---------------------------------------------------
FUNCTION BorraArchivo(pFile)
*---------------------------------------------------
IF FILE(pFile)
DELETE FILE (pFile)
ENDIF 
ENDFUNC 
*---------------------------------------------------

*---------------------------------------------------
* Evento constructor
PROCEDURE Init
*---------------------------------------------------
LPARAMETERS tcURLWS
        this.sURL_WS = tcURLWS
        this.iStatus = 0
        this.sError = ""
ENDPROC
*---------------------------------------------------

ENDDEFINE 

Fernando D. Bozzo

unread,
May 7, 2013, 8:12:18 PM5/7/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Lenin:

El XML que hiciste no es válido, ya que los tags de inicio y cierre no conservan la misma capitalización.
Por ejemplo, comenzás con "soapenv" y terminás con "SOAP-ENV" que no se parece en nada.

Con esto me funcionó:


        TEXT TO sXMLRequest TEXTMERGE NOSHOW
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://merlyna.com/.ajax/abc/webserviceSRI-RegistroCivil.php">
   <soapenv:Header/>
   <soapenv:Body>

      <web:nombreCedulaRegistroCivil soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<arg0 xsi:type="xsd:string"><<tcCedula>></arg0>
         <arg1 xsi:type="xsd:int">tiNumero1</arg1>
         <arg2 xsi:type="xsd:int">tiNumero2</arg2>
         <arg3 xsi:type="xsd:string">tcCadena1</arg3>
         <arg4 xsi:type="xsd:string">tcCadena2</arg4>
         <arg5 xsi:type="xsd:string">tcCadena3</arg5>
         <arg6 xsi:type="xsd:string">tcCadena4</arg6>
      </web:nombreCedulaRegistroCivil>
   </soapenv:Body>
</soapenv:Envelope>
        ENDTEXT


Saludos.-


Lenin Avila

unread,
Aug 22, 2013, 11:34:47 PM8/22/13
to publice...@googlegroups.com, guille...@yahoo.com.ar
Hola Fernando,

Cómo estás, espero que todo bien. Primero ante todo mil disculpas, no había visto tu respuesta ya que este tema lo deje a un lado porque me dediqué a otras cosas. Una amiga lo vio y lo trajo nuevamente a colación, y al ingresar nuevamente al foro me topo con la grata novedad de que habías contestado mi duda y bueno, luego de algunos arreglos adicionales, como el "descomponer" el XML para ver los datos, todo salió muy bien.

Te agradezco infinitamente por tu ayuda.

Que pases bien.

Saludos

Lenin

Fer

unread,
Aug 23, 2013, 6:22:59 AM8/23/13
to publice...@googlegroups.com

Me alegra que te haya servido :-)

Saludos

PIRATADELPROFIT PROFIT

unread,
Jul 28, 2016, 1:18:19 PM7/28/16
to Comunidad de Visual Foxpro en Español, guille...@yahoo.com.ar
Hola amigo Guillermo, estoy en esta situacion y no se como resolver, en la empresa se actualizo toda la plataforma pero tenemos 1 Web Services q esta operando en Win XP, ahora tenemos es Win 7 Pro y necesito configurar nuevamente el servicio sin exito, tiene alguna guia o manual para configurar el IIS en Win 7 q pueda usar ?

saludos

Ing. Bernardo José Martínez Pérez

unread,
Jul 28, 2016, 1:42:09 PM7/28/16
to publice...@googlegroups.com
Ejecuta vfp como administrador y registra el webservice, espero te ayude.

Saludos

Enviado desde mi Windows Phone

-----Mensaje original-----
De: "PIRATADELPROFIT PROFIT" <piratad...@hotmail.com>
Enviado el: ‎28/‎07/‎2016 12:18
Para: "Comunidad de Visual Foxpro en Español" <publice...@googlegroups.com>
CC: "guille...@yahoo.com.ar" <guille...@yahoo.com.ar>
Asunto: [vfp] Re: OT: Publicar Web Service desde VFP 9 SP2
Reply all
Reply to author
Forward
0 new messages