Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema Web Service

Estas en el tema de Problema Web Service en el foro de .NET en Foros del Web. Buenas Noches. Verán, resulta que he empezado ahora con los WebService, y para empezar, he creado un pequeño Servicio en el que quiero conectarme a ...
  #1 (permalink)  
Antiguo 29/03/2004, 16:03
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Problema Web Service

Buenas Noches.

Verán, resulta que he empezado ahora con los WebService, y para empezar, he creado un pequeño Servicio en el que quiero conectarme a un MS Server y sacar los datos de una tabla através de un SqlDataReader.

La cuestión es que todo me funciona bien, pero en vez de salir por pantalla todos los resultados, como debería ser lo normal, solo me sale el primero y punto.

Les Dejo el código fuente, para que me comenten haber que puedo estar haciendo mal.




Imports System.Web.Services
Imports System.Data.SqlClient
<WebService(Namespace := "http://tempuri.org/")> _
Public Class Service1
Inherits System.Web.Services.WebService

#Region " Código generado por el Diseñador de servicios Web "
#End Region


Dim CN As New SqlConnection("Persist Security Info=False;Initial Catalog=BdAcademia;Data Source=127.0.0.1;TimeOut=5;password=1982genius;use r id=sa;packet size=4096")
Dim Cmd As New SqlCommand("select * from talumnos", CN)
Dim DR As SqlDataReader
Dim Variable As Array
Dim i As Int16 = 0
<WebMethod()> Public Function Hola()
Try
CN.Open()
DR = Cmd.ExecuteReader
While DR.Read
Return "Nombre: " & DR.Item("nombre")
End While
Catch Ex As Exception
Return Ex.Message
Finally
DR.Close()
CN.Close()
End Try
End Function

End Class



En fin, espero puedan echarme un cable, desde ya muchas gracias, saludos.
__________________
Charlie.
  #2 (permalink)  
Antiguo 29/03/2004, 17:18
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Me llama la atencion ésto:

Cita:
<WebMethod()> Public Function Hola()
Try
CN.Open()
DR = Cmd.ExecuteReader
While DR.Read
Return "Nombre: " & DR.Item("nombre")
Te regresa un valor porque le estás indicando que el primer valor que encuentre lo devuelva.

Por el codigo que veo mas bien tendrías que guardar todos los datos en el array que declaraste arriba y ése es el que tienes que devolver.

Por otro lado, te cuidado porque estás regresando un valor antes de que cierres la conexion y tu datareader

Cita:
Return "Nombre: " & DR.Item("nombre")
End While
Catch Ex As Exception
Return Ex.Message
Finally
DR.Close()
CN.Close()
Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 31/03/2004, 07:10
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Dim CN As New SqlConnection("La Cadena de Conexion")
Dim Cmd As New SqlCommand("select * from talumnos", CN)
Dim DR As SqlDataReader
Dim MiArray As Array
Dim i As Int16 = 0
<WebMethod()> Public Function DevuelveDatos()
Try
CN.Open()
DR = Cmd.ExecuteReader
While DR.Read
MiArray(i) = "Nombre: " & DR.Item("nombre")
End While
Catch Ex As Exception
Return Ex.Message
Finally
DR.Close()
CN.Close()
return MiArray
End Try
End Function

Bien, pues cuando recibo esto en mi Aplicacion Windows me da error de que no coinciden los tipos. Lo tengo asi.

Dim ServicioWeb as new localhost.service1
Dim UnArray as Array
UnArray=ServiciosWeb.DevuelveDatos()

¿Qué es lo que tengo mal?

Nota: Que sepan que lo de el Aplicacion Windows lo de UnArray=... lo tengo dentro de un evento de boton.

En fin, haber si pueden ayudarme, y gracies desde ya.
__________________
Charlie.
  #4 (permalink)  
Antiguo 31/03/2004, 09:29
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Te podría quedar así:

Cita:
..
....
Dim MiArray(0) As String
Dim i As Int16 = 0

<WebMethod()> Public Function DevuelveDatos() as Array
Try
CN.Open()
DR = Cmd.ExecuteReader
While DR.Read
MiArray(i) = "Nombre: " & CStr(DR.Item("nombre"))
i = i + 1
ReDim Preserve MiArray(i) 'Aqui redimensiono para hacerlo dinámico
End While
Catch Ex As Exception
Response.write (Ex.Message)
Finally
DR.Close()
CN.Close()
return MiArray
End Try
End Function
Y ya despues para llamarlo:

Dim ServicioWeb as new localhost.service1
Dim UnArray as Array
UnArray=ServiciosWeb.DevuelveDatos()


Suerte
  #5 (permalink)  
Antiguo 31/03/2004, 14:20
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Vale RootK, voy a probarlo, pero me ha surgido una duda que me carcome la cabeza, ¿Por que pones en el Catch un response.write si lo voy a usar desde una aplicacion windows? Ese response write, me imagino que no lo verá mi WindowsForm. ¿Entonces a que se debe que lo hayas puesto?

Por cierto, gracias opr el cable que em estas dando, me cuesta bastante hacerme con esto de los webservices.
__________________
Charlie.
  #6 (permalink)  
Antiguo 31/03/2004, 14:31
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Por que pones en el Catch un response.write si lo voy a usar desde una aplicacion windows
Tienes razón.. lo que pasa es que pensé que ibas a ocuparlo a nivel web.. pero para evitar eso y lo puedas ocupar tanto a nivel web como application puedes hacer ésto:

Cita:
..
..
Catch Ex As Exception
Array.Clear(MiArray, 0, MiArray.Length) 'Limpiamos el array
MiArray(0) (Ex.Message)
Finally
..
..
Saludos
  #7 (permalink)  
Antiguo 31/03/2004, 15:34
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Bueno, esta mierda sigue sin tirar tio.

Al ejecutar el cliente capturo el error, y me sale una parrafada de la virgen, lo más llamativo es que me dice que debo añadir el System.Array, ya que hereda de IOCollection.

He puesto un imports System.Array (Por probar) en mi cliente, pero nada, no chufa ni pa dios.

Joder, ya no sé q mas hacer, un puto valor si lo recibo, pero quiero recibir más de uno, y por más que lo intengo con un array o un dataset no me hace ni puto caso.

Ya no sé que mas hacer la verdad.
__________________
Charlie.

Última edición por chcma; 31/03/2004 a las 15:37
  #8 (permalink)  
Antiguo 31/03/2004, 15:42
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
un puto valor si lo recibo, pero quiero recibir más de uno
Supongo que estas barriendo el arreglo para obtener todos sus valores verdad..??

For i = 0 To s.Length - 1
..
...
'obtego los valores
' algo = MiArray(i)
Next

Por cierto... puedes poner como estas mandando a llamar a tu webservice..??
  #9 (permalink)  
Antiguo 31/03/2004, 16:01
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
ASI ACABAMOS ANTES, HABER QUE VES.


**********************
*** SERVICIO WEB *****
**********************

Imports System.Web.Services
Imports System.Data.SqlClient
<WebService(Namespace := "http://tempuri.org/")> _
Public Class Service1
Inherits System.Web.Services.WebService
#CODIGO GENERADO POR EL DISEÑADOR...
Dim CN As New SqlConnection("cadena_De_Conexion")
Dim DA As SqlDataAdapter = New SqlDataAdapter("select * from talumnos", CN)
Dim DS As DataSet = New DataSet()
Dim FA As DataRow
Dim i As Int16 = 0
Dim UnArray(0) As String
<WebMethod()> Public Function Datos() As Array
Try
DA.Fill(DS, "DTalumnos")
For Each FA In DS.Tables("DTalumnos").Rows
UnArray(i) = FA("nombre")
i += 1
ReDim Preserve UnArray(i)
Next
Catch Ex As Exception
MsgBox(Ex.Message & "HOLA")
End Try
Return UnArray
End Function
End Class






**********************
*** CLIENTE WIND ***
**********************
Public Class Form1
Inherits System.Windows.Forms.Form
#Codigo Generado Por el Diseñador . . .
Dim ServicioWeb As New localhost.Service1()
Dim MiArray As Array
Private Sub Button1_Click(...)TODO EL ROLLO DEl HANDLES
Try
MiArray = ServicioWeb.Datos()
Catch EX As Exception
MsgBox(EX.Message)
End Try
End Sub
End Class
__________________
Charlie.
  #10 (permalink)  
Antiguo 31/03/2004, 17:20
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
MMm... creo que ya se lo que pasa... hace poco leí que un webservice tiene problemas para devolver propiamente un tipo de datos Array... , pero para solucionar ésto lo que puedes hacer (y ten por seguro que funciona porque yo ya lo hice) es :

Cita:
<WebMethod()> Public Function Datos() As String()
Try
DA.Fill(DS, "DTalumnos")
..
...
Y para problarlo puedes hacer ésto:

Dim ws As New localhost.Service1()
Dim x As Array

x = ws.Datos

For i As Integer = 0 To x.Length - 1
MessageBox.Show(x(i))
Next


Ahora si te debe funcionar porque yo ya hice una prueba

Suerte
  #11 (permalink)  
Antiguo 01/04/2004, 15:48
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Bueno RootK, aqui estoy otra vez, verás, eso que me has puesto, creo que no es del todo correcto.

Digo esto ya que al decirle a mi función Datos que es String, me da error al intentar devolver el array UnArray.

El código que tengo es el mismo que el qeu está arriba, exceptuando que el método Datos as String en vez de Array.

Probe a declarar el UnArray como String y como Array, pero de las dos formas, al hacer el: return UnArray, me señala UnArray en azul, sin embargo, si pongo Datos as Array no me da ese error, aun que tampoco funciona.

¿Crees que puede que te hayas olvidado algo?

Nuevamente gracias por la ayuda prestada.
__________________
Charlie.
  #12 (permalink)  
Antiguo 02/04/2004, 09:13
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
ya que al decirle a mi función Datos que es String

Si te das cuenta no es un string normal.. si no mas bien un arreglo de strings...

Checa ésta línea.

Cita:
<WebMethod()> Public Function Datos() As String()
Tengo los parentesis despues de string, con ello indico que es un arreglo.


Pero si aún así no te funciona, me parece extraño porque te digo que hice un par de pruebas y me funcionaron sin problemas.

Checalo bien y me dices como te fue. . .
  #13 (permalink)  
Antiguo 02/04/2004, 15:08
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Ok, probaré, muchas gracias por tu paciencia.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:24.