none
Consultar un servicio web RRS feed

  • Pregunta

  • Saludos, como puedo desde Windows Phone (el emulador de VS) consultar un servicio web.

    Es un servicio web muy básico (asmx) que lo único que hace es recibir y sumar dos números, pero no logro hacerlo.

    Uso VB.net

    Gracias


    __________________
    Edward Ocando
    Desarrollador .NET
    "Medir el progreso del desarrollo de un programa por líneas de código, es como medir el avance de la construcción de un avión en toneladas."
    <small>Bill Gates</small>

    __________________
    www.soydesarrollador.net


    • Editado Edward Ocando martes, 15 de noviembre de 2011 17:26 error de tipeo.
    martes, 15 de noviembre de 2011 17:24

Respuestas

  • Buenas Edward

    En el enlace que te pase lo explico con detalle y un ejemplo para un metodo llamado GetData, echale un vistazo.

    Un saludo.


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Edward Ocando martes, 22 de noviembre de 2011 14:27
    martes, 22 de noviembre de 2011 14:26
    Moderador

Todas las respuestas

  • Hola Edward

    con agregar la referencia al servicio, debería de crearse un proxy que te permite instanciar el servicio y utilizar sus métodos.

     


    Alberto Diaz Martin twitter://@adiazcan | http://geeks.ms/blogs/adiazmartin | MVP SharePoint Server
    martes, 15 de noviembre de 2011 20:18
  • Hola Eduardo, ¿Se resolvió tu duda? La solución que te dio Alberto es totalmente acertada.

    Por favor, si te ayudo marca la respuesta como correcta para el buen funcionamiento del foro. ESTO ES INDISPENSABLE. Si no, ¿Como sabrá otro usuario que la respuesta ha sido válida y te ha ayudado?

    Muchas gracias.


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    sábado, 19 de noviembre de 2011 12:08
    Moderador
  • Gracias por responder, te comento que no lo he resuelto.

    Te detallo lo que hago

    1.- Creo un servicio web básico que solo consulta una base de datos (Código incluido mas abajo)

    2.- Creo una aplicación Windows a la cual le agrego la referencia al servicio web y desde la aplicación Windows el servicio web funciona excelente (Código incluido mas abajo)

    3.- Creo una aplicación Windows Phone y también agrego la referencia al servicio web y con el mismo codigo de la aplicación windows me da error . Código mas abajo.  En el código indico el error que muestra y el lugar donde se muestra el error.

    Agradezco tu orientación para resolver el inconveniente.

     

    Codigo del servicio web: (funciona muy bien)

     

    <WebMethod(Description:="<i>Leer Nombre</i>")>
    	Public Function ConsultaNombre(ByVal Cedula As Integer) As System.String
    		Dim Cmd As New SqlCommand
    		Cmd.CommandText = "SELECT Nombres From Contactos Where Cedula = " & Cedula.ToString
    		Cmd.Connection = Conn
    
    		Dim Da As New SqlDataAdapter(Cmd)
    
    		Dim Dt As New DataTable
    		Da.Fill(Dt)
    		Return Dt.Rows(0)(0).ToString
    	End Function
    
    
    	<WebMethod(Description:="<i>Leer Edad</i>")>
    	Public Function ConsultaEdad(ByVal Cedula As Integer) As System.String
    		Dim Cmd As New SqlCommand
    		Cmd.CommandText = "SELECT Edad From Contactos Where Cedula = " & Cedula.ToString
    		Cmd.Connection = Conn
    
    		Dim Da As New SqlDataAdapter(Cmd)
    
    		Dim Dt As New DataTable
    		Da.Fill(Dt)
    		Return Dt.Rows(0)(0).ToString
    	End Function
    
    	<WebMethod(Description:="<i>Leer Email</i>")>
    	Public Function ConsultaEmail(ByVal Cedula As Integer) As System.String
    		Dim Cmd As New SqlCommand
    		Cmd.CommandText = "SELECT Email From Contactos Where Cedula = " & Cedula.ToString
    		Cmd.Connection = Conn
    
    		Dim Da As New SqlDataAdapter(Cmd)
    
    		Dim Dt As New DataTable
    		Da.Fill(Dt)
    		Return Dt.Rows(0)(0).ToString
    	End Function
    
    	<WebMethod(Description:="<i>Agregar resgistro contacto</i>")>
    	Public Sub AgregarContacto(ByVal Cedula As Integer, _
       ByVal Nombres As String, _
       ByVal Edad As Integer, _
       ByVal Email As String, _
       ByVal Telefono As String)
    
    		Dim Query As String = "Insert Into Contactos (Cedula, Nombres, Edad, Email, Telf) VALUES (@Cedula, @Nombres, @Edad,  @Email, @Telf)"
    
    		Dim Cmd As New SqlCommand()
    		Cmd.Parameters.Add(New SqlParameter("@Cedula", System.Data.SqlDbType.Int)).Value = Cedula
    		Cmd.Parameters.Add(New SqlParameter("@Nombres", System.Data.SqlDbType.VarChar)).Value = Nombres
    		Cmd.Parameters.Add(New SqlParameter("@Edad", System.Data.SqlDbType.VarChar)).Value = Edad
    		Cmd.Parameters.Add(New SqlParameter("@Email", System.Data.SqlDbType.VarChar)).Value = Email
    		Cmd.Parameters.Add(New SqlParameter("@Telf", System.Data.SqlDbType.VarChar)).Value = Telefono
    
    		Conn.Open()
    		Cmd.CommandText = Query
    		Cmd.Connection = Conn
    		Cmd.ExecuteNonQuery()
    		Conn.Close()
    	End Sub
    
    	<WebMethod(Description:="<i>Consultar Registro</i>")>
    	Public Function ConsultaRegistro(ByVal Cedula As Integer) As System.Boolean
    		Dim Cmd As New SqlCommand
    		Cmd.CommandText = "SELECT Nombres From Contactos Where Cedula = " & Cedula.ToString
    		Cmd.Connection = Conn
    		Dim Da As New SqlDataAdapter(Cmd)
    		Dim Dt As New DataTable
    		Da.Fill(Dt)
    		If Dt.Rows.Count > 0 Then
    			Return True
    		Else
    			Return False
    
    		End If
    	End Function
    


     

    Codigo de la aplicacion Windows: (trabaja de maravillas)

     

    ' http://localhost:32768/Service1.asmx ejecutandose en IIS
    Public Class Form1
    
    	Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    		Dim oServicio As New ServicioReferencia.Service1SoapClient
    		Label6.Visible = True
    
    		If oServicio.ConsultaRegistro(txtCedula.Text) Then
    			txtNombres.Text = oServicio.ConsultaNombre(txtCedula.Text)
    			txtEdad.Text = oServicio.ConsultaEdad(txtCedula.Text)
    			txtEmail.Text = oServicio.ConsultaEmail(txtCedula.Text)
    		Else
    			MessageBox.Show("No encontrado")
    		End If
    
    		Label6.Visible = False
    
    	End Sub
    End Class
    


     

    Código de la aplicación Windows phone (Da error):

     

    ' http://localhost:32768/Service1.asmx corriendo en IIS
    Partial Public Class MainPage
    	Inherits PhoneApplicationPage
    
    	' Constructor
    	Public Sub New()
    		InitializeComponent()
    	End Sub
    
    	Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    		' Agregar.. (ESTO FUNCIONA BIEN, AGREGAR FUNCIONA, EL ERROR OCURRE AL LEER EL VALOR ( Button2_Click)
    		Try
    			Dim oServicio = New ServicioReferencia.Service1SoapClient
    			oServicio.AgregarContactoAsync(txtCedula.Text, txtNombres.Text, txtEdad.Text, txtEmail.Text, txtTelefono.Text)
    			MessageBox.Show("Registro Insertado")
    		Catch ex As Exception
    			MessageBox.Show("Registro no insertado: " & ex.ToString)
    		End Try
    		LimpiarCajas()
    	End Sub
    
    	Private Sub LimpiarCajas()
    		txtCedula.Text = ""
    		txtNombres.Text = ""
    		txtEdad.Text = ""
    		txtEmail.Text = ""
    		txtTelefono.Text = ""
    	End Sub
    
    	Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
    		' Buscar: AQUI DA ERROR , AL LEER UN DATO
    		Try
    			Dim oServicio = New ServicioReferencia.Service1SoapClient
    			oServicio.ConsultaNombreAsync(txtCedula.Text)
    			txtNombres.Text = oServicio.ConsultaNombre(txtCedula.Text)
    			' Funciona bien en WIn form pero no en WP7
    			' Error	1	'ConsultaNombre' no es un miembro de 'WindowsPhone.ServicioReferencia.Service1SoapClient'.	
    			' P:\ADO_WebServices_WinPhone\WindowsPhone\WindowsPhone\MainPage.xaml.vb	37	22	WindowsPhone
    
    			txtEdad.Text = oServicio.ConsultaEdad(txtCedula.Text)
    			txtEmail.Text = oServicio.ConsultaEmail(txtCedula.Text)
    
    			' Falta codigo pára leer el valor devuelto.....
    		Catch ex As Exception
    			MessageBox.Show("Error: " & ex.ToString)
    			LimpiarCajas()
    		End Try
    	End Sub
    End Class
    


     

     


    __________________
    Edward Ocando
    Desarrollador .NET
    "Medir el progreso del desarrollo de un programa por líneas de código, es como medir el avance de la construcción de un avión en toneladas."
    <small>Bill Gates</small>

    __________________
    www.soydesarrollador.net

    • Editado Edward Ocando martes, 22 de noviembre de 2011 13:51 Faltaba información...
    martes, 22 de noviembre de 2011 13:45
  • Hola Edward

    El problema es que en Windows Phone los servicios web son asíncronos, esto es, al referenciar el servicio crea un evento Completed y un metodo Async para cada metodo que tengas en el servicio.

    En tu caso, el servicio no tiene el método ConsultaEdad, tendrá el método ConsultaEdadAsync que no devuelve nada y un evento ConsultaEdadCompleted que se lanzará cuando se haya completado la llamada al servicio y donde podrás obtener el valor devuelto.

    Mira este tutorial que hice para WCF, es básicamente lo mismo:

    http://geeks.ms/blogs/jyeray/archive/2011/02/23/windows-phone-7-y-wcf.aspx

    Y no, no hay forma de que se añadan los métodos normales. La filosofia de Windows Phone es no bloquear la interface de usuario con una llamada a un servicio, de hecho es la filosofia que se sigue en WPF, Silverlight y en Windows Forms debería hacerse igual.

    Un saludo.


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    martes, 22 de noviembre de 2011 14:03
    Moderador
  • y como lanzo el y como hago la llamada al servicio o lanzo ConsultaEdadCompleted y obtengo el resultado del mismo..?

    Te lo pregunto, porque estoy en un sitio donde no tengo VS para poder probarlo directamente.

    Gracias.


    __________________
    Edward Ocando
    Desarrollador .NET
    "Medir el progreso del desarrollo de un programa por líneas de código, es como medir el avance de la construcción de un avión en toneladas."
    <small>Bill Gates</small>

    __________________
    www.soydesarrollador.net
    martes, 22 de noviembre de 2011 14:21
  • Buenas Edward

    En el enlace que te pase lo explico con detalle y un ejemplo para un metodo llamado GetData, echale un vistazo.

    Un saludo.


    MCTS - .NET 4.0 Windows Applications
    MCTS - .NET 4.0 Data Access
    MCTS - .NET 4.0 Service Communication Applications
    MCPD - .NET 4.0 Windows Developer
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Marcado como respuesta Edward Ocando martes, 22 de noviembre de 2011 14:27
    martes, 22 de noviembre de 2011 14:26
    Moderador
  • Como te dije, no tengp VS a la mano, voy a revizarlo por la noche y mañana te comento.

    Gracias


    __________________
    Edward Ocando
    Desarrollador .NET
    "Medir el progreso del desarrollo de un programa por líneas de código, es como medir el avance de la construcción de un avión en toneladas."
    <small>Bill Gates</small>

    __________________
    www.soydesarrollador.net
    martes, 22 de noviembre de 2011 14:29