Consumir WebService creado en PHP con Vb.Net

En el artículo anterior habíamos creado el servicio web que nos permitirá lograr interacción a través de diferentes aplicaciones ejecutándose en diferentes dispositivos para interactuar con una base de datos. Ahora es momento de elaborar la aplicación cliente que se encargara de consumir dicho servicio web y de colocarlo en funcionamiento, para ello vamos a elaborar una aplicación en vb.net como la que se observa a continuación:

img1

Bien comencemos a elaborar la aplicación, estoy utilizando como lenguaje visual Basic.net 2008, para obtener esta interfaz agregaremos 3 textbox, 4  botones, 1 groupbox y varios labels.

Ahora vamos a agregar la referencia web, para ello nos dirigimos a la barra de menú y escogemos la opción proyecto, en el menú desplegable que aparece, seleccionamos la opción  Agregar Referencia de servicio.

img2

Enseguida se abrirá una nueva ventana, en ella presionamos el botón Avanzadas, tal y como se ve en la imagen

img3

en la siguiente ventana que se abre presionamos el botón agregar referencia web

img4

en la siguiente ventana que nos aparece escribimos la url del servicio web tal y como se ve en la imagen:

img5

Luego presionamos en el enlace que nos muestra la wsdl:

img6

podemos ver que el programa nos indica que fue encontrado un servicio web, así mismo se observan los métodos que conforman dicho servicio, luego en el campo nombre de referencia web escribimos el nombre con el cual visual basic identificara el servicio, procedemos a presionar el botón Agregar Referencia.

Bien, de esta manera ya esta agregada la referencia web al proyecto tal y como se puede ver en el explorador de soluciones de la interfaz de programación en la siguiente imagen:

img7

Ahora que tenemos todo listo, podemos empezar a programar.

Inicialmente hacemos la importación de la referencia web al código de nuestro programa.


Imports ejemplo_webservice.servicio_php.miservicioweb

bien, después de esto, pasemos a programar en el botón Probar Web Service que se encargara de enviarle una cadena al método enviar_respuesta del servicio web, si la conexión y el envio / recepción de los datos funciona bien el resultado será un mensaje que envía el servidor junto con la cadena concatenada; podemos ver el código a continuación:

Private Sub Button_probar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_probar.Click

Dim pws As New servicio_php.miservicioweb

Dim resultado As String

Try

resultado = pws.enviar_respuesta("Funciona")

MsgBox(resultado)

Catch ex As Exception

End Try

End Sub

Probamos el programa y presionamos el botón probar webservice, observamos el siguiente resultado (si todo sale bien).
img8

Bien, pasemos ahora a programar el botón guardar:

primero creamos la función o subrutina guardar_datos() que se encargara de registrar los datos en la base de datos, como se puede observar se hace uso del metodo registrar_datos de nuestro servicio web y se le están pasando como parámetros la cedula, el nombre y apellidos obtenidos de los textbox manteniendo el orden definido en nuestro webservice

Sub guardar_datos()

Dim pws As New servicio_php.miservicioweb

Dim resultado As String

Try

resultado = pws.registrar_datos(Me.Text_cedula.Text, Me.Text_nombres.Text, Me.Text_apellidos.Text)

If (resultado = "No") Then

MsgBox("El Usuario no pudo Ser Registrado!", MsgBoxStyle.Exclamation, "Advetrencia")

End If

If (resultado = "Si") Then

MsgBox("El Usuario ha Sido Registrado Exitosamente!", MsgBoxStyle.Information, "Notificacion")

End If

Catch ex As Exception

' MsgBox(ex.Message)

End Try

End Sub

Luego llamamos la función guardar_datos() en el evento click del botón Guardar como se observa a continuación:


Private Sub Button_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_guardar.Click

guardar_datos()

End Sub

Podemos probar la aplicación y registrar a varias personas ingresando los datos respectivos, como se observa en la siguiente imagen:
img9
al presionar el botón guardar, inmediatamente veremos un mensaje de confirmación indicando que los datos han sido registrados en la base de datos.

Luego codificamos el botón nuevo que se encargar de limpiar o borrar los datos de los textbox, creemos la función limpiar()

Sub limpiar()
Me.Text_cedula.Clear()

Me.Text_nombres.Clear()

Me.Text_apellidos.Clear()

End Sub

Ahora vamos a llamar a dicha función en el evento click del botón nuevo:


Private Sub Button_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_nuevo.Click

limpiar()

End Sub

Por ultimo, pasemos a programar el botón buscar, que se encargara de buscar registros en la base de datos, para ello diseñamos la función o subrutina buscar_datos() de la siguiente manera:

Sub buscar_datos()

Dim pws As New servicio_php.miservicioweb

Dim resultado As String

Try

resultado = pws.buscar_datos(Trim(Me.Text_cedula.Text))

If (resultado = "Si") Then

' busco ahora los datos de la persona

Me.Text_cedula.Text = pws.mostrar_datos_cedula(Trim(Me.Text_cedula.Text))

Me.Text_nombres.Text = pws.mostrar_datos_nombre(Trim(Me.Text_cedula.Text))

Me.Text_apellidos.Text = pws.mostrar_datos_apellido(Trim(Me.Text_cedula.Text))

Else

limpiar()

MsgBox("El Usuario que usted Busca No se Encuentra en la Base de Datos!", MsgBoxStyle.Exclamation, "Notificacion")

End If

Catch ex As Exception

End Try

End Sub

como es de notarse en el código, primero hacemos uso del método buscar_datos del webservice, para verificar si la persona se encuentra registrada en la base de datos (pasando como parámetro la cedula), en caso de que si este en la base de datos se emplean los metodos mostrar_datos_cedula, mostrar_datos_nombremostrar_datos_apellido del webservice (pasando como parametro la cedula) para extraer la informacion necesaria de dicha persona. En caso de que no se encuentre el registro en la base de datos el programa mostrara un mensaje indicando que no existen coincidencias.

luego llamamos a la función buscar_datos() en el evento click del botón buscar:

Private Sub Button_buscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_buscar.Click
buscar_datos()
End Sub

bien, ahora que tenemos todo listo podemos hacer la otra prueba al programa usando el botón buscar, tal y como se observa en la siguiente imagen:

img10

Ingresamos la cedula de la persona a buscar y si esta se encuentra en la base de datos, notaremos que la aplicación nos arroja además, el nombre y apellidos correspondientes.

Bueno, eso es todo amigos, espero y les sea útil esta aplicación, mas adelante desarrollare otro ejemplo de consumir este mismo servicio web con una aplicación móvil en j2me.

Descargar Aplicacion

11 comentarios en “Consumir WebService creado en PHP con Vb.Net

  1. el ejemplo es muy bueno..me sirvio de mucho..pero como podria mostrar un listado de todos los registros en un datagridview??..

  2. Facil para el datagridview, haces la conexion con mysql, agregas la referencia de mysql, y genera la conexion dentro del visual,
    agregar un datagridview, y te debe pintar todas esas filas

      • Lo que hice fue devolver un solo arreglo con los n elementos que ocupaba, y no un arreglo con un arreglo adentro.

        registre mi función así para que quede mas claro.

        $server->register(‘create’,array(‘1’=>’xsd:string’,’2’=>’xsd:string’,’3’=>’xsd:string’),array(‘return’=>’tns:response’),$ns,$ns.’#creater’,’rpc’,’encoded’,’descrpcion del server’);

        y asi hice el response

        $server->wsdl->addComplexType(‘response’,’complexType’,’struct’,’all’,»,
        array(
        ‘1’=>array(‘name’=>’1’, ‘type’ =>’xsd:int’),
        ‘2’=>array (‘name’=>’2′,’type’=>’xsd:string’),
        ‘3’=>array(‘name’=>’3′,’type’=>’xsd:int’)
        )
        );

  3. A ver si puedes ayudarme al importar la referencia web me dan el siguiente error:
    Error 1 Error de la herramienta personalizada: No se pueden importar servicios Web o esquemas. No se puede importar el enlace ‘pruebaWSBinding’ del espacio de nombres ‘urn:pruebaWS’. La operación ‘authenticate’ en portType ‘pruebaWSPort’ del espacio de nombres ‘urn:pruebaWS’ tenía el siguiente error de sintaxis: La operación no tiene un enlace coincidente. Compruebe si los nombres de operación, entrada y salida de la sección Binding coinciden con los nombres correspondientes de la sección PortType. c:\users\miusuario\documents\visual studio 2010\Projects\ejemplo_webservice_php\ejemplo_webservice_php\My Project\Settings.settings 1 1 ejemplo_webservice_php

    y asi no consigo acceder a la referencia…que puede pasar? muchas gracias

  4. Hola,
    Estoy consumiendo un web service desarrollado en PHP SOAP (Content-Type: text/xml; charset=ISO-8859-1).

    Agregué correctamente la referencia web, todo bien, sin embargo al invocar una función, ésta me regresa nothing, o sea, nulo, ¿les ha pasado algo así?

    Saludos!

    • Te recomendaría que imprimas el response aveces hay errores en el script y eso no permite que sea parseado y recibido ejemplo print_r($cliente->response); Esto debería de mostrarte que esta pasando del lado del server.

  5. hola tu servicio me sirvió bastante, pero tengo el siguiente problema :
    no manejo mucho php, pero necesito consumir el siguiente webservice :
    https://conexion.facto.cl/documento.php.
    integre un Servicio web en vb en como tu ejemplo, pero no puedo enviar los dato no veo los formatos de los procedimientos.

    gracias por tu ayuda.

Deja un comentario