Está en la página 1de 8

Consumir Web Services con Visual Basic

Vamos a crear una aplicacin en Visual Basic para conectarnos a un Web Services que nos entregar los indicadores econmicos de Chile, los cuales podemos usar en cualquier aplicacin si la necesidad de tener que ingresar nosotros mismos estos valores a una base de datos. Empecemos.

Comencemos por crear un nuevo proyecto

Los controles que agregaremos son los siguientes:

Luego guardamos el proyecto como Consulta_WS.vbp y el formulario como Form_WS.frm.

Ahora que ya tenemos todo listo, nuestro formulario debera quedar as:

Antes de comenzar a escribir cdigo en nuestro proyecto, necesitamos agregar una referencia a Microsoft XML, V3.0 y eso lo hacemos de:

Luego buscamos Microsoft XML, V3.0 y la seleccionamos.

Hacemos clic en Aceptar y ya estamos listos.

Nuestro siguiente paso ser agregar un Mdulo a nuestro proyecto.

Le dejamos el nombre que nos da por defecto (Module1) y escribimos la siguiente funcin: Function InvokeWebService(strSoap, strSOAPAction, strURL, ByRef xmlResponse) As Boolean Dim xmlhttp As MSXML2.XMLHTTP30 Dim blnSuccess As Boolean Set xmlhttp = New MSXML2.XMLHTTP30 xmlhttp.open "POST", strURL, False xmlhttp.setRequestHeader "Man", "POST " & strURL & " HTTP/1.1" xmlhttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8" xmlhttp.setRequestHeader "SOAPAction", strSOAPAction Call xmlhttp.send(strSoap) If xmlhttp.Status = 200 Then blnSuccess = True Else blnSuccess = False End If Set xmlResponse = xmlhttp.responseXML InvokeWebService = blnSuccess Set xmlhttp = Nothing End Function

Ahora que ya tenemos lista la funcin que se encargar de conectarse al Web Services, nos queda poder llamarla desde nuestro botn Consultar. Damos doble clic sobre el botn y escribimos:

Private Sub Consultar_Click() Dim xmlResponse As MSXML2.DOMDocument30 Dim strSoap As String Dim strSOAPAction As String Dim strWsdl As String strSoap = Soap.Text strSOAPAction = Action.Text strWsdl = Wsdl.Text If InvokeWebService(strSoap, strSOAPAction, strWsdl, xmlResponse) Then Resultado.Text = xmlResponse.xml Else Resultado.Text = "Error" End If Set xmlResponse = Nothing End Sub

Bueno, ya tenemos lista nuestra aplicacin que se encargar de consultar un Web Services, pero ahora debemos aprender como usarla. Para nuestro ejemplo, vamos a consultar la pgina de Indicadores Financieros de Chile desde la siguiente direccin (siempre que el servicio se encuentre disponible, o sino, pueden usar otro web services):http://www.desachile.com. Una vez aqu buscamos la direccin que nos llevar a la pgina del Web Serviceshttp://www.desachile.com/webservice.asmx

Analicemos un poco esta pgina. En el link Service Description, si haces clic sobre el, veremos que nos lleva a la pgina http://www.desachile.com/webservice.asmx? WSDL en donde WSDL son las siglas de Web Services Description Language, un formato XML que se utiliza para describir los Servicios Web. Volvamos atrs.

Si hacemos clic en el Link Indicadores, nos llevar a http://www.desachile.com/webservice.asmx?op=Indicadoresque es la pgina que nos interesa, por que nos dir que informacin debemos enviar para consultar el Web Services de Indicadores Financieros.

Fijmonos en SOAP 1.1

La primera seccin nos indica que es lo que debemos enviar y la segunda seccin nos indica que es lo que recibiremos. Como vemos, debemos enviar un XML con una fecha de consulta y nos retornar un XML con los resultados.

Vamos a copiar la primera seccin y pegarla en nuestra aplicacin en el cuadro que tenemos para el Soap. No olviden colocar la fecha de consulta con el formato ao mes da (ej: 20081203):

<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Indicadores xmlns="Indicadores"> <Fecha>20081203</Fecha> </Indicadores> </soap:Body> </soap:Envelope>

Ahora copiamos el SOAPAction ("Indicadores/Indicadores") y lo pegamos en Action de nuestra aplicacin sin las comillas.

Ya solo nos queda la direccin Wsdl que como ya vimos antes es: http://www.desachile.com/webservice.asmx?WSDL la copiamos y la pegamos en nuestra aplicacin.

Ya podemos hacer clic en consultar y obtendremos el XML con los indicadores.

Si ordenamos el resultado tendremos:

<?xml version="1.0" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <IndicadoresResponse xmlns="Indicadores"> <IndicadoresResult> <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemasmicrosoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="indicadores"> <xs:complexType> <xs:sequence> <xs:element name="id" type="xs:int" minOccurs="0" /> <xs:element name="uf" type="xs:double" minOccurs="0" /> <xs:element name="usd" type="xs:double" minOccurs="0" /> <xs:element name="euro" type="xs:double" minOccurs="0" /> <xs:element name="utm" type="xs:double" minOccurs="0" /> <xs:element name="tcm" type="xs:double" minOccurs="0" /> <xs:element name="fecha" type="xs:int" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType>

</xs:element> </xs:schema> <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xmldiffgram-v1"> <NewDataSet xmlns=""> <indicadores diffgr:id="indicadores1" msdata:rowOrder="0"> <id>432</id> <uf>21429.37</uf> <usd>666.84</usd> <euro>847.53</euro> <utm>37652</utm> <tcm>127.49</tcm> <fecha>20081203</fecha> </indicadores> </NewDataSet> </diffgr:diffgram> </IndicadoresResult> </IndicadoresResponse> </soap:Body> </soap:Envelope>

Ahora ya solo queda recorrer el XML para obtener los valores, pero eso se los dejo a ustedes. Saludos y espero les sirva.

También podría gustarte