Vamos a crear una aplicación en Visual Basic para conectarnos a un Web Services que nos entregará los indicadores económicos de Chile, los cuales podemos usar en cualquier aplicación 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 debería quedar así:
Antes de comenzar a escribir código 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 Módulo a nuestro proyecto.
Le dejamos el nombre que nos da por defecto (Module1) y escribimos la siguiente función:
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 función que se encargará de conectarse al Web Services, nos queda poder llamarla desde nuestro botón “Consultar”. Damos doble clic sobre el botón 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 aplicación que se encargará de consultar un Web Services, pero ahora debemos aprender como usarla.
Para nuestro ejemplo, vamos a consultar la página de Indicadores Financieros de Chile desde la siguiente dirección (siempre que el servicio se encuentre disponible, o sino, pueden usar otro web services): http://www.desachile.com. Una vez aquí buscamos la dirección que nos llevará a la página del Web Services http://www.desachile.com/webservice.asmx
Analicemos un poco esta página. En el link “Service Description”, si haces clic sobre el, veremos que nos lleva a la página 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 atrás.
Si hacemos clic en el Link “Indicadores”, nos llevará a http://www.desachile.com/webservice.asmx?op=Indicadores que es la página que nos interesa, por que nos dirá que información debemos enviar para consultar el Web Services de Indicadores Financieros.
Fijémonos en SOAP 1.1
La primera sección nos indica que es lo que debemos enviar y la segunda sección 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 sección y pegarla en nuestra aplicación en el cuadro que tenemos para el Soap. No olviden colocar la fecha de consulta con el formato año mes día (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 aplicación sin las comillas.
Ya solo nos queda la dirección Wsdl que como ya vimos antes es: http://www.desachile.com/webservice.asmx?WSDL la copiamos y la pegamos en nuestra aplicación.
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:schemas-microsoft-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:xml-diffgram-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.
Hola que tal porfavor no se si se trata del tema pero me podrias ayudar a obtener el tipo de cambio de esta pagina http://www.sunat.gob.pe/cl-at-ittipcam/tcS01Alias?mes=02&anho=2013 a un formulario de visual basic 6.0
ResponderEliminarMil gracias =) Si me sirvió 100 puntos
ResponderEliminarMuchas gracias buen aporte.
ResponderEliminarUna pregunta si el WS tiene autenticacion con usuario y contraseña, como seria aqui?
Buen aporte!
ResponderEliminarUna pregunta me puedes ayudar.
Tengo que enviar un xml a un web service con autenticacion (Usuario y contraseña) y recibir respuesta de entregado.
Aqui como seria?
Gracias por tu aporte!
Excelente aporte, yo tengo que enviar datos pero con usuario y contraseña como podria hacerlo?
ResponderEliminarNada más adiciona en el open usuario y contrasena:
Eliminarxmlhttp.open "POST", strURL, False, "usuario", "contrasena"
mil gracias
ResponderEliminarMuchas gracias estoy utilizando este código pero me devuelve un status 500 parece que si hace el open con la autenticación que le puse ya que se requiere en un webservices que estoy probando. Pero me devuelve ese error alguna idea ????? Gracias.
ResponderEliminarGenial, gracias por el aporte
ResponderEliminarcuando lo ejecuto me da mensaje de acceso denegado
ResponderEliminarse produce en la linea siguiente:
Call xmlhttp.send(strSoap)
obtengo un mensaje de error cuando lo ejecuto:
ResponderEliminarACCESO DENEGADO
en la linea: Call xmlhttp.send(strSoap)
gracias por su aporte, ojala puedan resolver esto
Me sale un error en el Call xmlhttp.send(strSoap), me dice Acceso denegado
ResponderEliminarMuy buen aporte, toqueteando un poco pude obtener las cotizaciones del BCU (banco central del Uruguay)
ResponderEliminarmuchas gracias
Podrías facilitarme el código?
ResponderEliminarGracias, Angel
Angel, ya no tengo ese código (ni siquiera el visual basic instalado), son muchos años ya de eso, pero todo el código es el que se indica y no hay mas que eso.
Eliminar