FoxPress – Septiembre 2001

 

Cómo consumir un Servicio Web desde VFP 6.0

http://www.fpress.com/

 

Por Alberto Rodríguez                                                                            consumir.zip
 

Cuando Microsoft introdujo la Automatización Remota, los programadores fueron introducidos en la idea de separar las aplicaciones en múltiples capas y realizar la comunicación entre las capas mediane la Automatización Remota. Este proceso fue formalizado y posteriormente incluido en Windows mediante la tecnología DCOM. Ambas tecnologías te permiten conectarte a un proceso en una máquina remota y comunicarte con ese proceso remoto.

Sin embargo, el problema es que el proceso de determinar la máquina remota y los mecanismos de comunicación son windows-céntricos. Cuando intentas construir servicios que realicen las funciones de la capa intermedia en Internet te encuentras con problemas en los protocolos, autenticación y otras cuestiones. Los Servicios Web extienden el paradigma multi-capa a la Web y abren sus acciones a otros sistemas operativos.

¿Qué es un servicio Web?

Los Servicios Web  usan los conocidos URI para identificar los host y servicios que quieres invocar. El método que deseas invocar y los parámetros que pasas a ese método se expresan como parte de la URL o encapsulada en un fragmento XML mediante el protocolo SOAP. Los resultados se devuelven al que lo ha pedido mediante XML.

Este esquema tiene miles de ventajas y entre otros que cualquier plataforma es capaz de solicitar una página Web, leer los resultados e interactuar con este servicio.

Los Servicios Web son la próxima generación de aplicaciones Web. Son modulares, se autodescriben  y pueden ser invocadas y publicadas desde cualquier punto de la web. Los Servicios Web pueden ser desde simples funciones o métodos hasta complejos procesos de negocio.

 

 

Una forma sencilla de entender lo que es un servicio web es pensar lo que un cibernauta hace cuando quiere un hotel en otra ciudad. Normalmente suele ir un buscador y poner las palabras: “HOTEL Cordoba” y a través de ahí irse acercando a las páginas de los hoteles que más le interesen.

 

Con un Servicio Web de reserva de hoteles bastaría con que existiera una función de búsqueda que tuviera un parámetro con el nombre de la ciudad y ya está.

 

Un ejemplo, por favor....

 

   En nuestro caso vamos a consumir un servicio que está en la Web y que es el traductor Babelfish. Lo vamos a hacer de dos formas.

 

Implementación 1

 

   Esta implementación necesita que esté instalado el soporte SOAP que lo tienes en http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml y en los ficheros del mes. (Sobre SOAP ya se ha hablado en los números anteriores de esta revista)

 

   Este kit seguramente ya viene integrado en VFP 7 o estará disponible en el CD de este producto.

 

Una vez instalado escribe un programita con lo siguiente:

 

LOCAL x
 
x = CREATEOBJECT("MSSOAP.SoapClient")
x.MSSoapInit("http://www.xmethods.net/sd/2001/BabelFishService.wsdl",;
       "BabelFishService","","")
 
? x.babelfish('en_es','a Fox is near you')

 

Y verás la respuesta...

 

Seguramente tu imaginación ya está empezando a volar... pero si esto lo hacemos un poco más sofisticado podemos hacernos un formulario con ese código y he aquí la traducción que BabelFish me propone para las primeras letras de la vieja canción de Bob Dylan Hard Times in New York Town del año 1961

 
La tradución no es muy ajustada pero este tema no es el que nos interesa ahora.

 

Implementación 2

 

Esta implementación es un poco más laboriosa que la anterior pero sirve para entender un poco más todo el movimiento que se está produciendo detrás de los escenarios.

 

Esta vez necesitamos tener instalado el  último Parser XML de MS (en los ficheros del mes te adjunto el Parser 3.0SP1 aunque en el momento de escribir estas líneas ya estaba bastante avanzado el  Parser 4.0). La Web de Microsoft donde están estos Parsers es: http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml

 

Igual que antes vamos a usar el Servicio Web llamado BabelFish que se encuentra domiciliado en http://www.xmethods.net/detail.html?id=14 . (una especie de central de Servicios) Ahí es donde nos describe su funcionalidad y la forma de usarlo.

 
             La información que nos da es:
 

Descripcion:

Interface for AltaVista's Babelfish service.

Translates text of up to 5k in length. For more information about the service, see the babelfish homepage.

SOAP Endpoint URL:

http://services.xmethods.net:80/perl/soaplite.cgi

SOAPAction:

urn:xmethodsBabelFish#BabelFish

Method Namespace URI:

urn:xmethodsBabelFish

Method Name(s):

BabelFish

WSDL URL:

http://www.xmethods.net/sd/2001/BabelFishService.wsdl  
(IBM WSDL Toolkit 1.1 - compatible version)

Instructions:

METHOD: BabelFish
 
      INPUT : 
 
          translationmode(xsd:string)
          sourcedata (xsd:string)


  
      OUTPUT
          return (xsd:string)
 
translationmodes are listed below.
sourcedata is the text to be translated.
result is the translated data.
 
  
Translation                 translationmode
-----------                 ----------------
English -> French           "en_fr"
English -> German           "en_de"
English -> Italian          "en_it"
English -> Portugese        "en_pt"
English -> Spanish          "en_es"
French -> English           "fr_en"
German -> English           "de_en"
Italian -> English          "it_en"
Portugese -> English        "pt_en"
Russian -> English          "ru_en"
Spanish -> English          "es_en"
 
 
¡¡Muy bien, ahora a escribir el código!! Si eres un inquieto ya estarás nervioso por no ver el código pero si 
eres más reflexivo estarás diciendo: ¡un momento, un momento, que me expliquen que significa todo eso de
 SOAP Endpoint URL, Method Namespace URI, etc... Esta vez vamos a contentar a los inquietos y a los
 reflexivos los mandaremos a que se repasen los articulos sobre SOAP del mes pasado y anterior.
 
Sigamos, entonces queremos escribir ¡ya! El código:
 
Pues aquí está:
 
CLEAR
oHTTP = create('MSXML2.XMLHTTP')
 
*************-Creamos el Sobre - ************
*- Cabecera SOAP
   strPaquete = '<SOAP:Envelope
        xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">'
strPaquete = strPaquete + '<SOAP:Header></SOAP:Header>'
*-Cabecera Body
strPaquete = strPaquete + '<SOAP:Body>'
*- Nombre del Método
strPaquete = strPaquete + '<m:BabelFish xmlns:m="urn:xmethodsBabelFish">'
*- Nombre de la propiedad pasada como parámetro
strPaquete = strPaquete + '<translationmode>en_es</translationmode>'
strPaquete = strPaquete + '<sourcedata>Fox</sourcedata>'
strPaquete = strPaquete + '</m:BabelFish>'
strPaquete = strPaquete + '</SOAP:Body></SOAP:Envelope>'
 
oHTTP.open("post", "http://services.xmethods.net:80/perl/soaplite.cgi", .F.)
 
oHTTP.setRequestHeader("Content-Type", "text/xml")
 
*-Decimos qué objeto queremos instanciar y qué método y en qué lugar está
oHTTP.setRequestHeader("SOAPAction", "urn:xmethodsBabelFish#BabelFish")
 
oHTTP.send(strPaquete)
strReturn = oHTTP.responseText  
 
? strReturn
 
                               El código es una adaptación del que se publicó el mes pasado y lo que unicamente se hace es 
                               adaptarlo a los requerimientos de este Servicio Web.
 
Al ejecutarlo me devuelve una cadena en la que veo que me ha traducido Fox por Zorro.
 
Si quieres más información sobre la creación y uso de servicios web puedes mirarte:  
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfoxgen7/html/vfpws.asp que 
aunque está más adaptado a VFP 7.0 se puede incorporar con mínimos cambios a VFP 6.0
 
 

 

 

FoxPress – Septiembre de 2001

© 2001 FoxPress. All rights reserved