Sei sulla pagina 1di 20

Web Services en Visual FoxPro 8

En los siguientes párrafos intentaré hacer una breve reseña de lo que son los Web Services y
luego, en un modestísimo paso a paso, explicaré como crear un servicio web utilizando VFP8.
Publicado por msalias el Martes, 23 de Marzo de 2004
Este mismo servicio será el que utilizaremos en la tercer parte de esta nota, en la que
siempre desde VFP8, desarrollaremos una pequeña aplicación que consumirá el servicio
previamente creado. Manos a la obra.

¿Qué es un Web Service?

Un Servicio Web es una aplicación que proporciona datos y servicios a otras aplicaciones.
Basado en HTTP y XML, se apoya para su funcionamiento en una arquitectura de
comunicaciones estándar entre el proveedor del servicio y el cliente. Esta comunicación se
efectúa por medio de mensajes. Estos mensajes “empaquetados“ mediante SOAP deben
cumplimentar las pautas definidas en el “contrato” de servicio entre el proveedor y el clientes
(WSDL). Los Servicios Web, entre otras ventajas, son independientes de la plataforma y del
lenguaje con el que se desarrollen, tanto las aplicaciones del proveedor del servicio como las
del cliente del mismo. Servidores y clientes sólo deben entender los protocolos
anteriormente mencionados y como estos fueron ampliamente aceptados en las distintas
plataformas hasta convertirse en estándares, hoy podemos lograr una integración
multiplataforma con implementaciones totalmente transparentes en cada extremo.

Esquema básico de los Web Services

Sobre SOAP, WSDL y otras siglas...

Desarrollemos más en profundidad que hay detrás de estas mágicas siglas:

Simple Object Access Protocol (SOAP): Protocolo de intercambio de información


estructurada basado en XML. Entre otras cosas, SOAP puede representar llamadas a
procedimientos remotos (RPC) y sus respuestas, proveyendo un mecanismo para
intercambiar información y servicios entre aplicaciones. Funciona normalmente sobre HTTP
así que trabaja con los Firewalls, los Proxies y otros obstáculos existentes. También puede
utilizar la autenticación y el formato de compresión de HTTP y soporta SSL para encriptación
y seguridad. Por todo esto es utilizado por los Servicios Web para la comunicación entre el
proveedor de servicio y sus clientes.

WSDL: Documento XML que describe completamente el formato de los mensajes


intercambiados. Se puede consultar libremente por los clientes y representa el "contrato" de
servicio.
Web Service Discovery (DISCO): Es el proceso de localización y descubrimiento de las
descripciones de servicios web. A través de este proceso los clientes descubren la existencia
del servicio, la funcionalidad ofrecida y como interactuar con él.

UDDI Business Registry: Los nodos UDDI permiten que las organizaciones publiquen
información relativa a los servicios que ofrecen. Constituyen el punto de entrada a los
servicios web, proporcionando un mecanismo sencillo de localización de los servicios
disponibles. Como parte de la especificación UDDI, se dispone de un API que permite
interactuar programaticamente con el registro.

¿Para qué nos pueden servir los Servicios Web?

Tal vez sería simplificar un poco las cosas decir que la tecnología de los servicios Web se
puede definir como la elevación a la Web de la tecnología COM/DCOM. Algunos discreparán
conmigo en esta afirmación pero pensando de esta manera podemos descubrir en forma
instantánea casi todo en lo que nos pueden ayudar los servicios Web. Ahora sí podemos
decir que contamos con la posibilidad de distribuir en forma global nuestras aplicaciones y de
intercambiar datos entre empresas que no solamente se encuentren entre sí físicamente
alejadas sino que además hayan implementado sus aplicaciones bajo diferentes plataformas
de desarrollo. Siguiendo con la analogía entre COM/DCOM y los Servicios Web, estos tienen
una implementación más genérica y transparente que los primeros y al igual que los
componentes tradicionales, los servicios web presentan una interfase a los consumidores del
servicio la que se describe completamente en la WSDL, que vendría a ser como una Type
Library en la Web.

Bueno, hasta aquí todo fue una aburrida aunque necesaria perorata teórica.

Pasemos al código que es más divertido.

Requisitos para publicar y consumir Servicios Web con VFP8

Para publicar un servicio Web o para consumirlo utilizando VFP8 necesitamos tener instalado
en nuestra máquina el Microsoft SOAP Toolkit en su versión 3.0, que puede descargarse en
forma gratuita desde el sitio de la MSDN en http://msdn.microsoft.com/downloads/ y que
lo que básicamente nos proporciona es un conjunto de clases COM que se encargan de la
creación y decodificación de paquetes SOAP y de su envío a través de HTTP.

Publicando un Servicios Web con VFP8 en tres pasos

El objetivo que nos propondremos cumplir es desarrollar un servicio Web que nos brinde la
posibilidad de publicar cuatro procedimientos que podrán ser llamados en forma remota y
que recibiendo como parámetros a dos números cualesquiera, devuelvan como respuesta el
resultado de aplicar a esos dos números alguna de las cuatro operaciones matemáticas
básicas, es decir Suma, Resta, Multiplicación y División. En otras palabras, trataremos de
desarrollar una mini-calculadora, que se ha convertido en el típico ejemplo “Hola Mundo”
para los Web Services.

Antes de empezar a numerar los pasos a seguir para publicar este servicio Web quiero
destacar que para ello también es necesario tener instalado y activo el Servicio del Internet
Information Server. Ahora sí, manos a la obra:

Paso 1: Crear el componente DLL que cumplirá las funciones de nuestra calculadora

Para ello, creemos un nuevo proyecto llamado WS-Calculadora y en la solapa “Código” del
administrador de proyectos, agregaremos un nuevo PRG. Dentro del mismo definamos una
clase llamada WS-Calculadora tipo SESSION con atributo OLEPUBLIC y dentro de ella
definamos cuatro procedimientos, uno para cada uno de las operaciones matemáticas que
vamos a contemplar. Esto es muy largo de explicar así que veamos el código que es
bastante sencillo de entender:
DEFINE CLASS WSCalculadora AS Session OLEPUBLIC
PROCEDURE Suma ( Sumando1 AS Number, Sumando2 AS Number ) AS Number
RETURN Sumando1 + Sumando2
ENDPROC
PROCEDURE Resta ( Restando1 AS Number, Restando2 AS Number ) AS Number
RETURN Restando1 - Restando2
ENDPROC
PROCEDURE Multiplica ( Factor1 AS Number, Factor2 AS Number ) AS Number
RETURN Factor1 * Factor2
ENDPROC
PROCEDURE Divide ( Dividendo AS Number, Divisor AS Number ) AS Number
IF Divisor # 0
RETURN Dividendo / Divisor
ELSE
RETURN -1
ENDIF
ENDPROC
ENDDEFINE

En este código podemos ver que tanto los parámetros de los procedimientos que incluye la
clase como el resultado de dichos procedimientos están tipados, es decir, se aclara (o
declara) cual va a ser el tipo de cada uno de los parámetros que se van a recibir y también
de la respuesta.

• Salvemos este código como WS-Calculadora.Prg


• Mediante la opción Build del Project Manager construyamos la DLL.
• Seleccionemos como Build Action la opción Multi-Threaded COM server (dll)
• Chequeemos la opción Display Errors
• Seleccionemos OK.
• Cuando nos pida el nombre de la DLL a crear, para ser originales, llamémosla WS-
Calculadora.
Con esto ya tendremos creada nuestra DLL que será capaz de Sumar, Restar, Dividir y
Multiplicar.

Ahora falta hacer pública las habilidades de nuestra creación y para ello vamos a recurrir
nuevamente a un Wizard de VFP8 que hará casi todo por nosotros, pero eso está en el paso
“tres” y este es el "uno" así que para que no se haga muy largo este camino pasemos sin
más al paso número “dos”.

Paso 2: Colocar nuestro componente en COM+

Este paso
no es estrictamente necesario pero si aconsejable de cumplir. Si lo omitimos en un ambiente
de desarrollo tengamos en cuenta que una vez que el Internet Information Server levanta el
componente que acabamos de crear, ante cualquier cambio que deseemos efectuar ya no
podremos volver a compilar el mismo sin detener el servicio del IIS (desde la línea de
comandos mediante la sentencia IISReset) con lo que estaremos deteniendo junto a nuestro
componente a todos los demás componentes que podrían estar corriendo bajo el dominio del
IIS. Para evitar esto es precisamente que sugiero colocar nuestro pequeño componente en el
ambiente de COM+ (además de todas las otras ventajas conocidas de esta tecnología de
componentes) y ante posibles cambios bastará con detener solo este servicio desde la
consola del Component Services. Bueno, si los convencí de utilizar COM+ sigan las siguientes
instrucciones sino salteen todo hasta el Paso 3.
Para
colocar nuestro componente WS-Calculadora.Dll en COM+ debemos primero abrir la consola
de Component Services.

Para ello, en Windows XP vayamos a “Inicio”, “Panel de Control”, “Herramientas


Administrativas” y hagamos doble clic en el “Servicio de Componentes”. Una vez que
ingresamos, veremos un TreeView en la parte izquierda de la pantalla. En el mismo,
despleguemos los nodos de “Servicios de componentes”, dentro de este, el nodo “Equipos” y
dentro de este, el nodo “Mi PC”. Este último nodo cuenta de cuatro carpetas. La primera de
ella contiene las aplicaciones COM+ que están “corriendo” en nuestro sistema.

Precisamente, es otra aplicación COM+ la que queremos agregar así que para ello
presionemos el botón derecho de nuestro mouse sobre dicha opción y seleccionemos
“Nuevo” y “Aplicación”.

Al hacer esto, se ejecutará el “Asistente para instalación de aplicaciones COM+” que, como lo
indica su presentación, nos ayudará a instalar o crear nuevas aplicaciones.

Sigamos adelante.

El nuevo paso del asistente nos permite seleccionar entre la instalación de una aplicación
pregenerada (para lo que deberemos contar con el archivo .msi respectivo) o una aplicación
vacía (que es este nuestro caso).

Seleccionemos esta última sin dudar y continuemos.


Aquí
deberemos indicar el nombre de la nueva aplicación COM+ que estamos generando, y
adivinen como la bautizaremos:

¡WS-Calculadora, por supuesto!

En el siguiente paso hay que especificar la identidad de la aplicación.

En este caso la tarea es bastante sencilla pues usaremos la opción predeterminada por el
asistente así que dejemos todo como está y sigamos avanzando.
Pues con esto hemos finalizado la primera parte de la instalación de nuestro componente en
COM+.

Seleccionemos finalizar y veamos como sigue esta historia.

Hasta aquí hemos creado una aplicación COM+ vacía así que si queremos que esta nos sea
de alguna utilidad, agreguémosle un componente: nuestra DLL.

Para ello, sobre la carpeta “Componentes” de nuestra nueva aplicación COM+, presionemos
el botón derecho de nuestro mouse e indiquémosle que queremos agregar un nuevo
componente.
Con esto volveremos a iniciar un
asistente, esta vez el “Asistente para instalación de componentes COM+” que, como lo indica
su presentación, nos ayudará a instalar o importar componentes.

Este nuevo paso en el asistente nos permite indicar si vamos a agregar un componente
nuevo o si vamos a importar un componente ya registrado.

Seleccionemos la primera opción (Instalar nuevos componentes) y sigamos adelante.


Ahora indiquémosle al asistente donde se encuentra la DLL que creamos en el paso 1.

Luego seleccionando “Abrir” avanzaremos otro paso más.

¡No estarán cansados, aún falta un poco más!

Al indicarle al asistente la DLL que contiene a nuestro componente, este automáticamente


detecta la “Type Library” que lo describe y en este paso sólo debemos confirmar que todo
esto lo ha hecho correctamente. Sigamos adelante.
Pues bien, hemos llegado al final de este pequeño calvario.

Como recompensa tenemos nuestra aplicación corriendo en COM+, que no es poco.

Presionando finalizar, ya podremos cerrar la consola de Component Services pues ya cumplió


su función y retornemos a VFP8 que aun nos queda mucho por hacer.

Pasemos al paso “tres”, que como lo indica el título de esta sección “Publique un WS en 3
pasos”, es el último.

Paso 3: Publicar el Servicio Web


Volvamos a nuestro querido VFP8 y sonrían, uno de los tantos Wizards que están bajo el
menú Tools, hace exactamente lo que nosotros queremos, asi que estamos a unos escasos
“clicks” del final. Veamos…

Ejecutemos el asistente o Wizard que se encuentra en el menú Tools, Wizards, bajo el


nombre de Web Services.

Con ello activaremos el “Visual FoxPro XML Web Services Publisher”, en cuya primer pantalla
deberemos indicar el componente COM desde el cual se va a generar el Web Service.

En la sección de COM server, deberemos tipear el full-path de la DLL que hemos creado. Para
facilitar esta tarea, a la derecha de este cuadro de selección podemos ver un botón con el
cual abriremos el dialogo típico de Windows para localizar un archivo cualquiera en una
unidad de almacenamiento. Una vez seleccionada la DLL y tal como lo indica el asistente, si
no queremos utilizar valores por defecto o valores usados anteriormente debemos usar el
botón rotulado “Advanced”.

Veamos que es lo que este esconde:


En esta parte del asistente, debemos especificar en primera instancia el nombre del servicio,
que en este caso será nuestro ya varias veces utilizado WSCalculadora. En la siguiente
opción indicaremos la URI del listener, es decir la URL a donde debemos ir a buscar la WSDL
al momento de consumir el servicio que estamos publicando. Esto es, ni más ni menos que
un directorio virtual del IIS.

En el ComboBox aparecerán todos los directorios virtuales utilizados con los que contemos
en el IIS de nuestra máquina.

En caso de querer cambiar a otro directorio virtual (nuevo o ya existente), seleccionemos el


botón que se encuentra a la derecha del ComboBox (Más abajo explicaré las opciones que
presenta el asistente en este caso, ahora sigamos con esta pantalla).

El cuadro de “File(s) Location” hay que indicar en el lugar físico en el disco donde se
almacenará la WSDL a crear. Más abajo, indicaremos el “Listener Type”, que puede ser un
filtro ISAPI o una página ASP según sea conveniente. Generalmente optaremos por los filtros
ISAPI pero en caso de ser necesario optar por una página ASP, podremos indicar su nombre
y el lenguaje en que se generarán los scripts de la misma.

Como vemos en la siguiente figura, el formulario esta dividido en tres solapas. Estas son las
opciones más importantes de la primer solapa y antes de pasar a la segunda, veamos que es
lo que nos mostraría el asistente en caso de querer cambiar el directorio virtual del IIS para
nuestra nueva aplicación.

El asistente nos pide que seleccionemos la ubicación en la que deseamos publicar nuestro
XML Web Service. La misma puede ser una ubicación existente o una nueva.

En la figura siguiente, yo he seleccionado una ubicación existente pero en caso de querer


crear una nueva ubicación, seleccionemos “New” y luego, más abajo, en “New Virtual
Directory Name” indiquemos el nombre de nuestro nuevo directorio virtual el que será
creado por el asistente en un nivel inmediatamente inferior a la ubicación que seleccionemos
en el Combo-Box rotulado como “Select Location (Virtual Directory)”.

Una vez completada alguna de las dos opciones explicadas, seleccionemos “Select” y
continuemos.

La
siguiente figura nos muestra la segunda solapa de la pantalla de opciones avanzadas del
asistente de publicación de servicios Web de VFP8.

En la misma se listarán los métodos expuestos en la WSDL.


Si por alguna razón deseáramos no publicar alguno de los métodos listados, sólo basta con
quitar la tilde que se encuentra a la izquierda del mismo.

Por defecto, el asistente seleccionará todos los métodos para ser expuestos. Seleccionemos
“OK” para seguir nuestro camino.

La tercera solapa de la pantalla de opciones avanzadas del asistente de publicación de


servicios Web de VFP8 (figura siguiente), nos permite ver y/o modificar el nombre de los
Namespaces para las diferentes opciones de la aplicación a crear.

Vale notar que el asistente nos sugiere remplazar el dominio “tempuri.org” por otro y
seguramente esto es lo que debamos hacer en caso de disponer de uno donde publicar
nuestro servicio, pero para este sencillo ejemplo podremos dejar las cosas como están.

Continuemos.

Ya saliendo de la
pantalla de opciones avanzadas, regresamos a la pantalla principal del asistente y en ella
vemos a la derecha del botón “Advanced…” otro similar rotulado “STK3 Wizard”. Este sirve
para disparar el Wizard del SOAP Toolkit 3 para la generación de la WSDL pero dado que
VFP8 tiene su propio Wizard (precisamente este que estamos utilizando), dejemos las cosas
como están y continuemos con la publicación del servicio. Para ello seleccionemos el botón
“Generate” y veamos que ocurre.

La pantalla que muestra la siguiente imagen puede que aparezca si el asistente detecta que
el directorio virtual donde indicamos que se genere la WSDL no está preparado para manejar
filtros ISAPI. En este caso dejemos que el asistente agregue lo necesario para resolver este
inconveniente respondiendo “Si” a la pregunta formulada. Sigamos…

Pues bien, hemos llegado al final. Nuestro servicio Web finalmente ha sido publicado y
mediante la pantalla que refleja la siguiente imagen, el asistente nos comunica el resultado
de los procesos efectuados. Seleccionemos “Aceptar” para salir del asistente.

Ahora, nuestro servicio web está publicado y listo para ser usado, siendo manejado por el IIS.
Pues bien, si es así, creemos una sencilla aplicación en VFP8 que consuma estos servicios,
para ver como se comporta.

Consumiendo Servicios Web con VFP8


El objetivo que nos propondremos cumplir esta vez es
desarrollar una pequeña aplicación que invoque a alguno de los cuatro procedimientos
remotos expuestos por nuestro web service publicado anteriormente pasándole como
parámetros dos números cualesquiera, para recibir como respuesta la suma, resta,
multiplicación o división de los mismos.

Para esto vamos a aprovechar una de las nuevas características de VFP8 que nos va a
ayudar a mejorar nuestra productividad haciéndonos tener todo al alcance de nuestras
manos. Estoy hablando de la ToolBox.

Para activarla, vayamos al menú “Tools” y seleccionemos “ToolBox”.

Esta nueva herramienta aparecerá en pantalla dividida en varias secciones. Una de ellas está
rotulada como “My XML Web Services”, seleccionémosla y veamos que sucede…

Antes de continuar quiero recomendarles una excelente nota de Beth Massi acerca de la
ToolBox que pueden encontrar en el número de febrero de esta revista.

Aquí, aparecerán todos los Web Services registrados en nuestro sistema.

Nuestro WSCalculadora estará en esta lista ya que el asistente de publicación de Web


Services que utilizamos anteriormente se encargó de registrarlo por nosotros, pero en caso
de querer consumir un Web Service que no hayamos publicado, en esta misma sección de la
ToolBox contamos con la opción “Register” que nos ayudará a registrarlos en forma sencilla.

Veamos como:

En la imagen anterior vemos que para registrar un Web Service sólo debemos indicarle al
asistente de registracion de Web Services de VFP8 la URL de la WSDL. Prestemos atención a
los ejemplos debajo del Combo-Box ya que si el Web Service esta desarrollado en .Net
(segundo ejemplo), la forma de invocar a la WSDL varía sensiblemente. También
disponemos aquí de un botón para buscar un Web Service en UDDI. Una vez obtenida la URL,
solo resta clickear “Register” y asunto concluido. Una vez registrado el servicio a consumir,
creemos un nuevo PRG (vacío) y hagamos Drag & Drop del servicio deseado desde la
ToolBox y hacia el PRG. Automáticamente, el Intellisense generará una buena porción de
código que servirá de estrutura guía a nuestro programa.

Todo el código que observamos en la imagen anterior es creado automáticamente por el


Intellisense. Pasando ya a la imagen siguiente, vemos dentro del círculo rojo la única línea
que deberemos agregar para hacer uso del Web Service, y además también vemos que
disponemos de Intellisense para nuestro servicio Web (ver círculo verde). Fácil ¿no?
También vemos que una vez seleccionado el método a utilizar, disponemos de Intellisense
también para la cantidad y el tipo de los parámetros de entrada y para el tipo de dato
devuelto por el método en cuestión.

Bueno, completando la única línea de código que debemos tipear y ejecutando el PRG
obtendremos como resultado una MessageBox similar a la que muestra la siguiente imagen.
Conclusión

Ahora sí, los Web Services nos ofrecen la posibilidad de interconectarnos entre aplicaciones
en una forma sencilla sin preocuparnos de la plataforma de desarrollo. La facilidad de su
implementación tanto para el desarrollo como para su consumo hacen de los Web Services
una herramienta interesante que todo desarrollador debe tener en cuenta.

Espero que esta nota les sea de utilidad. Es tarea de ustedes crear servicios web de mayor
utilidad que el de la presente nota. El único límite que nos ponen los Web Services es
nuestra imaginación, un límite sencillo de alcanzar en mi caso. Hasta pronto.

Rubén O. Rovira, (Buenos Aires-Argentina), es Licenciado en Sistemas. Dedicado al


desarrollo de software a medida para empresas comerciales y de servicios desde el año 1992;
ha utilizado FoxPro y Visual FoxPro como herramienta de desarrollo desde la versión 2.5
(DOS) en adelante. Hoy se desempeña como Consultor Independiente en el área Sistemas.
Puede ser contactado a rubenrovira@movi.com.ar.

Calificación promedio:

Comentarios:

Web Services VFP 9.0 con SO Win 2003 Server Realizado por rverabue el
Miércoles, 29 de Noviembre de 2006
Favor deseo saber si alguien tiene experiencia con la creacion de web services con SO Win
2003 Server. con VFP 9.0

Debido a que tengo problema al publicar el archivo WSDL me sale el error que la direccion
URL tiene problema de acceso, Sera acaso el IIS que hay que configurar?

Nota. En la version 8.0 con SO Win XP SP2 si he logrado que se publique y que funcione

mi email es rverabue50@hotmail.com (Guayaquil - Ecuador)

Gracias de antemano

Responder este comentario


Web Services VFP 9.0 con SO Win 2003 Server Realizado por rverabue el
Miércoles, 29 de Noviembre de 2006
Favor deseo saber si alguien tiene experiencia con la creacion de web services con SO Win
2003 Server. con VFP 9.0

Debido a que tengo problema al publicar el archivo WSDL me sale el error que la direccion
URL tiene problema de acceso, Sera acaso el IIS que hay que configurar?

Nota. En la version 8.0 con SO Win XP SP2 si he logrado que se publique y que funcione

mi email es rverabue50@hotmail.com (Guayaquil - Ecuador)

Gracias de antemano

Potrebbero piacerti anche