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:
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.
Enseguida se abrirá una nueva ventana, en ella presionamos el botón Avanzadas, tal y como se ve en la imagen
en la siguiente ventana que se abre presionamos el botón agregar referencia web
en la siguiente ventana que nos aparece escribimos la url del servicio web tal y como se ve en la imagen:
Luego presionamos en el enlace que nos muestra la wsdl:
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:
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).
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:
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_nombre, mostrar_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:
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.
el ejemplo es muy interesante..pero tengo una duda como podria retornar un listado de todas las celulas y mostrarlas en un datagridview
el ejemplo es muy bueno..me sirvio de mucho..pero como podria mostrar un listado de todos los registros en un datagridview??..
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
y si devuelvo un array como lo capturo me ejecuta lo que quiero pero solo me trae el primer parámetro de arreglo
Hola. Crishopher, me preguntaba si pudiste solucionar tu duda de los arrays. Si pudiste por favor compartenos tu solución.
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’)
)
);
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
tienes un error en el namespace del servidor revisa el ns
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.
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.