Creación de Webservices en Visual Foxpro

Posted on enero 18, 2012

5



VFP9 es capaz de crear Webservices, haciendo uso del Microsoft SOAP Toolkit v 3.0.
La forma más fácil de iniciarse en FOX con los Webservices, es ir al Task Manager, y buscar la opción del XML. Allí se puede dar de alta un servicio web, así como consumirlo, previa configuración. En caso de consumirlo, tiene la ventaja de que se puede usar un pequeño formulario que facilita crear casos de ejemplo de peticiones web, siempre que la función llamada disponga de pocos parámetros. Por supuesto, la ayuda del Help del producto es muy recomendable leerla.
En el Task Manager, se puede publicar el webservice, aunque yo soy más partidario de hacerlo directamente con el Soap toolkit, ya que seguramente sea la herramienta que se use para hacer las instalaciones a los clientes.
Para empezar, hay que crear una clase custom, y añadirle los métodos que queramos publicar. Básicamente, este paso es exactamente el mismo que cuando generamos cualquier COM+. (aquellos que luego se invocan con instrucciones tipo Createobject). Hecha la clase, hay que generar la DLL, preferiblemente Multithead.
En el equipo servidor, habrá que instalar IIS y deberá registrar la librería que hemos desarrollado con Regsvr32. En algunos casos, también es necesario configurar en IIS la compatibilidad con la extensión .WSDL. Es recomendable configurar la DLL en el administrador de componentes de Windows, para poder pararla cuando sea necesario, así como configurar el número de instancias concurrentes y el tiempo de espera a finalizar la DLL cuando no se usa.
Con el soap toolkit, seleccionamos la DLL creada, y activamos los métodos de la clase que han de aparecer en el servicio. Se le puede ir siguiendo la corriente al resto del asistente.
El nombre de servicio que se configure en el asistente, debe contener la IP o nombre del equipo donde se publica el WSDL. Es recomendable que el nombre o IP sea el mismo desde la Intranet, como en peticiones provenientes de Internet.
Qué devolver en el webservice?
Lo más aconsejable por mi experiencia, es devolver un DATASET, con lo que podemos usar funciones nativas como CURSORTOXML, que son compatibles con ADO Dataset, por lo que es fácilmente manipulable con .NET.
Cursortoxml() convierte una tabla o cursor, en formato XML. También es interesante dar un vistazo a la clase XMLDATASET, que nos permitirá añadir varias tablas relacionadas entre sí, en lugar de devolver una sola tabla, como hace cursortoxml().