Ejemplo de creación de webservice en Visual Foxpro 9


A continuación mostraré como crear y consumir un webservice.

Los datos devueltos por el webservice del ejemplo, son una cadena, un XML de un dataset y, como ejemplo final, un dataset formado por dos tablas, relacionadas entre sí.

Os recomiendo el siguiente link tutorial en portalfox.

Creación de un programa que genera una clase para utilizar como webservice:

* Demostración de creación de webservice

Define Class DemoWebService As Session OlePublic
Procedure XMLHolaTxt(lcMensaje As Character) As Character
* La rutina devuelve un texto plano con el literal Hola Mundo + lo que se le pase como parámetro
lcResultado = “Hola Mundo: “+lcMensaje
Return lcResultado
Endproc
Procedure XMLHolaXML(lcMensaje As Character) As Character
* La rutina devuelve un dataset
Create Cursor tmpRespuesta (campo1 c(10), campo2 N(10))
Insert Into tmpRespuesta (campo1, campo2) Values (lcMensaje, 8)
* Generamos el XML convirtiendo un cursor en XML, ver help de vfp.
Cursortoxml(“tmpRespuesta”, “lcResultado”,1,8,0,”1″)
Return lcResultado
Endproc
Procedure XMLHolaXML2Tablas(lcMensaje As Character) As Character
* La rutina devuelve un dataset
Create Cursor tmpTabla1 (codigo c(2), campo1 c(10), campo2 N(10))
Insert Into tmpTabla1 (codigo, campo1, campo2) Values (“1”,lcMensaje, 8)
Insert Into tmpTabla1 (codigo, campo1, campo2) Values (“2”,lcMensaje, 6)
Insert Into tmpTabla1 (codigo, campo1, campo2) Values (“3”,lcMensaje, 11)
Index On codigo Tag codigo
Set Order To codigo

Create Cursor tmpTabla2 (codigo c(2), descripcion c(10))
Insert Into tmpTabla2 (codigo, descripcion) Values (“1″,”Teléfonos”)
Insert Into tmpTabla2 (codigo, descripcion) Values (“1″,”Ordenadores”)
Insert Into tmpTabla2 (codigo, descripcion) Values (“2″,”Relojes”)
Index On codigo Tag codigo
Set Order To codigo

* creamos una relacion entre ambas tablas
Sele tmpTabla1
Set Relation To codigo Into tmpTabla2

* Generamos el XML convirtiendo un cursor en XML, ver help de vfp.

*****************************
*Generar XML
*****************************
Local loXMLAdapter As Xmladapter
Local lcXMLCustomers As String

loXMLAdapter = Createobject(“XMLAdapter”)

loXMLAdapter.RespectNesting= .T.

loXMLAdapter.AddTableSchema(“tmptabla1”)
loXMLAdapter.AddTableSchema(“tmptabla2”)
loXMLAdapter.UTF8Encoded = .T.
loXMLAdapter.ToXML(“lcResultado”)

Select tmpTabla1
Use
Select tmpTabla2
Use
Return lcResultado
Endproc
Enddefine

Consumo del webservice:

* Ejemplo consumo webservice

LOCAL lodemowebservice AS “XML Web Service”
* LOCAL lodemowebservice AS “MSSOAP.SoapClient30”
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
*__VFPWSDef__: lodemowebservice = http://windows/demowebservice/demowebservice.wsdl , demowebservice , demowebserviceSoapPort
LOCAL loException, lcErrorMsg, loWSHandler
TRY
loWSHandler = NEWOBJECT(“WSHandler”,IIF(VERSION(2)=0,””,HOME()+”FFC\”)+”_ws3client.vcx”)
lodemowebservice = loWSHandler.SetupClient(“http://windows/demowebservice/demowebservice.wsdl”, “demowebservice”, “demowebserviceSoapPort”)
* Call your XML Web service here. ex: leResult = lodemowebservice.SomeMethod()
lodemowebservice.XMLHolaTxt(“ParametroEnviadoEjemplo”)
lodemowebservice.XMLHolaXML(“ParametroEnviadoEjemplo”)
lodemowebservice.XMLHolaXML2Tablas(“ParametroEnviadoEjemplo”)
CATCH TO loException
lcErrorMsg=”Error: “+TRANSFORM(loException.Errorno)+” – “+loException.Message
DO CASE
CASE VARTYPE(lodemowebservice)#”O”
* Handle SOAP error connecting to web servicea
CASE !EMPTY(lodemowebservice.FaultCode)
* Handle SOAP error calling method
lcErrorMsg=lcErrorMsg+CHR(13)+lodemowebservice.Detail
OTHERWISE
* Handle other error
ENDCASE
* Use for debugging purposes
MESSAGEBOX(lcErrorMsg)
FINALLY
ENDTRY

Anuncios

16 comentarios en “Ejemplo de creación de webservice en Visual Foxpro 9

    • Has instalado el msxml4? Sin esas librerias, no funcionara ninguna peticion a un servidor xml.
      Prueba tambien acceder al servicio web en el navegador, intenta abrir la direccion xxxxxxx.wsdl y fijate al final, la ultima url que aparece, que sea correcta.

      • Prueba esto… a mi no me funciona… de hecho no puedo ni siquiera registrar el Servicio en VFP pues me marca que “Field COMFILE does not accept null values”…

        *LOCAL lowikiwebservice AS “MSSOAP.SoapClient30”
        LOCAL lowikiwebservice AS “XML Web Service”

        LOCAL loException, lcErrorMsg, loWSHandler
        TRY
        loWSHandler = NEWOBJECT(“WSHandler”, IIF(VERSION(2) = 0, “”, HOME() + “FFC\”) + “_ws3client.vcx”)
        loWikiWebService = loWSHandler.SetupClient(“http://fox.wikis.com/WikiWebService.WSDL”, “wikiwebservice”, “wikiwebserviceSoapPort”)

        lcXML = loWikiWebService.GetTextSearch(‘Stonefield’)

        XMLTOCURSOR(lcXML)
        BROWSE

        CATCH TO loException
        lcErrorMsg = “Error: ” + TRANSFORM(loException.Errorno) + ” – ” + loException.Message
        DO CASE
        CASE VARTYPE(lowikiwebservice)#”O”
        * Handle SOAP error connecting to Web Service
        CASE !EMPTY(lowikiwebservice.FaultCode)
        * Handle SOAP error calling method
        lcErrorMsg = lcErrorMsg + CHR(13) + ;
        lowikiwebservice.Detail
        OTHERWISE
        * Handle other error
        ENDCASE
        * Use for debugging purposes
        MESSAGEBOX(lcErrorMsg)
        FINALLY
        ENDTRY

  1. David. buenas noches estoy tratando de probar tu ejemplo. Lo copie con el nombre de demowebservice.wsdl, ya instale lIS, estoy en task Panel con las ventanas que tienes en tu ejemplo, ya lo publique y ahora me sale la opcion de COM SERVER, que seleccione componente para generar el XML,
    La pregunta es donde hayo este COM SERVER,

    Saludos

    • Es sencillo. Cuando compiles, en lugar de crear un .exe o un .app, crea una DLL. Recuerda que las clases que tengas en el proyecto, deben tener activada la opción de OLE Public, para que sean visibles al instancias los objetos que has creado.

    • Hola Abel. No tengo ni idea, dudo que se pueda desde FOX con el parser que genera el webservice. De cualquier forma, te aconsejo usar un método más estándar, como devolver un registro Dataset vacío (podría incluir el schema), o devolver simplemente una cadena de texto vacía (“”). Incluso devolver una tabla con un campo de error y otro de descripción, por aquello de dar una respuesta comprensible cuando hay problemas. Yo he usado los dos métodos en webservices que están en producción, con éxito. Depende el uso, puede estar mas optimizado devolver una cadena “” cuando no hay problemas y el resultado de la consulta no tiene datos.

  2. David:
    No se como es posible postear código con errores de compilación… La cuestión es que trate de compilarlo y se dieron varios errores de compilación y al llegar al Porc. (el cual no está declarado) que consume el Web Service… Todo fue un CAOS… No se si se trata de una trampa o que es lo que pasa, Has tratado de compilar lo que posteate?
    En Fin… a mi no me sirvió de nada…

    • Hola Jorge. En su momento lo probé y funcionaba bien, de echo, es un copiar/pegar de un ejemplo que probé antes de subirlo. WordPress cambió comillas, con lo que hay que retocar el código fuente. El webservice se alimenta de la dll que hay que compilar previamente. También es necesario tener instalado el msxml4 y el soap toolkit 3. Lamento que no te funcionase a la primera.

  3. Hola David:
    Discúlpame por darte la misma lata, tengo la duda de que si en esto influye el sistema operativo, en mi caso tengo instalado el Win 8 Pro, y me da el mismo error: “lodemowebservice is not an object”, lo que pasa es que no sé si tengo instalado el WSXML correcto o tal vez la versión correcta del SOAP. Como puedo ver si tengo instaladas las versiones correctas?
    De antemano, Gracias por tu apoyo
    Jorge Lupio A.

  4. Hola David. El web service funciona de pelicula en el equipo de produccion, pero al instalarlo en otro equipo no me funciona, me da error 1924 “lodemowebservice is not an object”

    • Buenos días David, quiero saber si pudiste resolver el error 1924 y cual fue la solución, yo tengo ahora el mismo problema. Agradezco tu colaboración

  5. David buenos días, por favor me puedes colaborar con este tema del webservice, copie el ejemplo del código y al ejecutarlo genera error: “Error: 1924 – LODEMOWEBSERVICE is not an object.”. Muchas gracias David

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s