Consumir un WebService es muy sencillo en Flex, siempre que el resultado que nos devuelva sea simple, cuando el resultado devuelto es complejo, ya se usan unas cuantas lineas mas de código y listo ;) .

A modo de introducción empezaremos con un WebService del buen Amigo elGuille, un Conversor de Temperaturas donde tenemos que enviarle un valor y nos retornará otro ya procesado. Este WebService contiene 2 funciones, en este ejemplo usaré la primera.

Primero para saber que tenemos que enviar y que tenemos que recibir veamos el WebService, en:
http://www.elguille.info/Net/WebServices/conversor.asmx?WSDL, ubiquemos la siguiente estructura:

XML:
  1. <s:element name="CaF">
  2.   <s:complexType>
  3.     <s:sequence>
  4.       <s:element minOccurs="1" maxOccurs="1" name="valor" type="s:double"/>
  5.     </s:sequence>
  6.   </s:complexType>
  7. </s:element>
  8. <s:element name="CaFResponse">
  9.   <s:complexType>
  10.     <s:sequence>
  11.       <s:element minOccurs="1" maxOccurs="1" name="CaFResult" type="s:double"/>
  12.     </s:sequence>
  13.   </s:complexType>
  14. </s:element>

En el Tag <s:element> vemos que tiene el atributo name="CaF", que viene a ser el nombre de la función que vamos a usar. Dentro de ella encontramos otros Tags, y nos fijamos en:

XML:
  1. <s:element minOccurs="1" maxOccurs="1" name="valor" type="s:double"/>

Aquí vemos el parámetro con su tipo de dato a enviar. El parámetro se llama valor y su tipo de dato es double.

Luego en el siguiente Element, vemos CaFResponse, dentro de él esta lo que recibiremos. Sería solo un resultado tipo doble.

Siempre que devuelva un solo valor, no hay que especificar algún parámetro o algo similar. En otros futuros post veremos como recibir XML y Clases ;) .

Bien ya tenemos definido que vamos a enviar y recibir en base a nuestro WebService, entonces vamos código en el Flex.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
  3.   layout="vertical" height="160" width="304">
  4.   <mx:WebService wsdl="http://www.elguille.info/Net/WebServices/conversor.asmx?WSDL"
  5.   id="wsConversor" showBusyCursor="true">
  6.     <mx:operation name="CaF">
  7.       <mx:request>
  8.         <valor>{txtValor.text}</valor>
  9.       </mx:request>
  10.     </mx:operation>
  11.   </mx:WebService>
  12.   <mx:Panel width="258" height="111" layout="absolute" title="Conversor de Temperaturas">
  13.     <mx:TextInput id="txtValor" width="62" x="109" y="10"/>
  14.     <mx:Button click="wsConversor.CaF.send()"  label="a ºF" x="179" y="10"/>
  15.     <mx:Label text="{wsConversor.CaF.lastResult}" x="109" y="40" width="119"/>
  16.     <mx:Label x="10" y="12" text="Celsius (C):"/>
  17.     <mx:Label x="10" y="40" text="Fahrenheit (F):"/>
  18.   </mx:Panel>
  19. </mx:Application>

Aquí vemos como se usa <mx:WebService>, siempre usaremos:

  • id para identificarlo,
  • WSDL para poner la URL del webservice,
  • showBusyCursor para que nos aparezca un reloj mientras esperamos la respuesta.

Para indicar la función que usaremos del WebService, dentro de <mx:WebService> usamos <mx:operation> y ponemos en su atributo name el nombre de nuestra función a usar, en este caso CaF. Luego dentro de este, dentro de <mx:request> pondremos la estructura según los parámetros que pida la función, en este caso solo sera un parámetro, valor que contenga el dato a enviar.

XML:
  1. <mx:WebService ...>
  2.     <mx:operation name="CaF">
  3.       <mx:request>
  4.         <valor>{txtValor.text}</valor>
  5.       </mx:request>
  6.     </mx:operation>
  7.   </mx:WebService>

Una vez listo el <mx:WebService>, ponemos unos cuantos elementos en nuestra aplicación y para hacer el llamado usaremos un botón y en su evento click ponemos wsConversor.CaF.send(), y listo :D .

:: Descargar aquí el MXML ::

Nota: Si van a usar algún WebService que no este en su hosting o en su localhost, recuerden poner el archivo crossdomain.xml del lado donde se encuentra el WebService a consumir. Si usan el WebService corriéndolo desde Flex funcionará correctamente aunque no este el archivo crossdomain.xml, pero recuerde siempre tenerlo en cuenta.