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

Ayuda: Consumir un WebService

Estas en el tema de Ayuda: Consumir un WebService en el foro de .NET en Foros del Web. Hola buenas, estoy programando un pequeño webservice probablemente en winforms la cuestión, es que tengo 2 funciones, la primera, me devuevle un string, cojonudo, funciona ...
  #1 (permalink)  
Antiguo 27/04/2005, 09:54
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Ayuda: Consumir un WebService

Hola buenas, estoy programando un pequeño webservice probablemente en winforms
la cuestión, es que tengo 2 funciones, la primera, me devuevle un string, cojonudo, funciona sin problemas.

La segunda, quiero que me devuelva un XMLDocument, generado a partir de una BD. Pum, errro, cuando hago la asignación:

la función del webvices hace el return bien, puesto que si lo hago "a pelo" a través del explorador, me abre el documento generado de forma correcta.

Pero cuando lo hago a través del windows forms y hago

dim servicio as localhost.Service1= new localhost.Service1

'Aquí peta
dim documento as xml.xmldocument = servicio.DevolverXML

me dice que el objeto es null, pues bien, como en el depurador, no puedo saber que me devuelve servicio (puesto que es un webservice), supongo que es documento el null y hago

dim documento as xml.xmldocument = new xml.xmldocument()
documento = servicio.DevolverXML()

pues entonces me dice que naranjas, que InvalidCastException!!!!!!!!!!

La pregunta es sencilla,aunque la explicación compleja, ¿Puedo retornar un XMLDocument a través de un WebService??????????????

Gracias de antemano
  #2 (permalink)  
Antiguo 27/04/2005, 10:40
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Hola minglein 2!

No te contesto claramente porque no estoy seguro, aunque un buen consejo...

Para los web services, siempre intentar que devuelvan valores de tipo NO complejos,,, supongo que esta opinión existe por que habrá dado malos resultados con según qué tipos de datos, a la hora de ser interpretados por según qué sistemas..
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 27/04/2005, 12:17
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:
¿Puedo retornar un XMLDocument a través de un WebService??????????????
Si se puede , pero recuerda darle valores a tu XMLDocument.. no se como tengas tu método.. pero te pongo un ejemplo de como lo podrías hacer por ejemplo desde una BD sql server usando reader y escribiendo en el XMLdoc

i.e:

Cita:
[WebMethod]
[ … more serialization attributes ]
public XmlDocument GetData( … parameters )
{
XmlDocument doc = new XmlDocument();
SqlCommand cmd = new SqlCommand();

// populate SqlCommand
// …

XmlReader reader = cmd.ExecuteXmlReader();

// now load the XML into an XmlDocument
doc.Load( reader );
return doc;
}

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 28/04/2005, 00:42
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Ok, rootk, pero es que el document lo cargo mediante XMLTextWriter, te pongo parte de mi cod:

Código PHP:
Dim enc As System.Text.Encoding
objXMLTW 
= New XmlTextWriter(path usuario ".xml"enc)

objXMLTW.WriteStartDocument()
objXMLTW.WriteStartElement("Document")
objxmltw.WriteStartElement("Actividades")
        
bd.abrir()
        
Dim dr As MySql.Data.MySqlClient.MySqlDataReader
        dr 
bd.ObtenerActividades()
        While 
dr.Read()
            
objxmltw.WriteStartElement("Actividad")

            
objxmltw.WriteStartElement("Id")
            
objxmltw.WriteString(dr("id"))
            
objxmltw.WriteEndElement()

            
objxmltw.WriteStartElement("NombreAct")
            
objxmltw.WriteString(dr("nombreact"))
            
objxmltw.WriteEndElement()

            
objxmltw.WriteStartElement("Descripcion")
            
objxmltw.WriteString(dr("descripcion"))
            
objxmltw.WriteEndElement()

            
objxmltw.WriteEndElement()
        
End While
        
dr.Close()
        
bd.Cerrar()
        
objxmltw.WriteEndElement()

        
objxmltw.WriteStartElement("Clientes")
        
bd.abrir()

       
Cargo los clientes
       bd
.cerrar()
       
objxmltw.WriteEndElement() 

        
objXMLTW.WriteEndElement()

            
objXMLTW.WriteEndDocument() 
            
objXMLTW.Flush() 

            
objXMLTW.Close()
           

            
Dim doc As Xml.XmlDocument = New Xml.XmlDocument
            doc
.Load(path usuario ".xml")
                 Return 
doc 
Donde bd es mi objeto de conexión a la base de datos, ya te digo que cuando lo hago a través del explorer me habre el xml sin problemas, es decir el doc.load me lo hace bien, por eso no entiendo que me diga InvalidCastException cuando lo intento recoger desde un webform, puede ser un problema de estructura???

Este es el xml que devuelve desde el explorer:
Código PHP:
<?xml version="1.0" encoding="utf-8" ?> 
- <Document>
- <Actividades>
- <Actividad>
* <Id>1</Id> 
* <NombreAct>Hostelería</NombreAct> 
* <Descripcion /> 
* </Actividad>
- <Actividad>
* <Id>2</Id> 
* <NombreAct>Talleres</NombreAct> 
* <Descripcion /> 
* </Actividad>
- <Actividad>
* <Id>3</Id> 
* <NombreAct>Kioskos</NombreAct> 
* <Descripcion /> 
* </Actividad>
* </Actividades>
- <Clientes>
- <Cliente>
* <Id>1</Id> 
* <Nombre>Nombres</Nombre> 
* <Actividad>1</Actividad> 
* <Titular>aaa</Titular> 

* </Cliente>
- ...
* </Clientes>
</Document>
Que me dices????Muchisimas gracias por tu ayuda
  #5 (permalink)  
Antiguo 28/04/2005, 05:13
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Otro problema es que para conectarme a la bd utilizo un driver que facilita Mysql para conexiones con .net y el MysqlCommand que así se llama el objeto no incluye la función ExecuteXMLReader(); (por lo menos la versión de la que dispongo, por lo que voy a mirar a ver si hay una versión nueva, y si ésta lo incluyese), por lo que debo seguir utilizando el while....
  #6 (permalink)  
Antiguo 28/04/2005, 10:58
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Buenas rootk and cia, nada, he probado devolver el reader y nada también el archivo como file y tampoco (eso es porque no deja esos tipos) y mysql no ha sacado actualización, asi que estoy mas empantanao que una patata....
  #7 (permalink)  
Antiguo 28/04/2005, 11:38
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.. otra cosa que se me ocurre es que regreses un dataset, al fin ese te puede guardar esquemas e informacion xml, así como escribir..

Y con ello ya no importa con que lo hagas si no el XML que estará dentro de tu dataset (ds.ReadXML)

Esa podría ser otra opcion.

Que opinas..?
  #8 (permalink)  
Antiguo 29/04/2005, 01:34
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
He intentado con el DataSet y también he tenido problemas, así que lo que voy a hacer (ya he empezado) es meterlo en vez de a un xml o un dataset, hacerlo a un string, y que luego sea el cliente el que se encarge de transformarlo, con esto además puedo añadir un nivel de seguridad, encriptando el string (además de la encriptación SSL y la autentificación requerida).

¿Que te parece la idea??¿¿¿va a trabajar mucho el cliente (PDA)???
  #9 (permalink)  
Antiguo 29/04/2005, 08:33
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:
He intentado con el DataSet y también he tenido problemas,
Personalmente es lo que a veces hago para enviarle la info a traves de mi WS, pero sería cosa de ver exactamente porque tienes problemas.

En fin,...

Cita:
hacerlo a un string, y que luego sea el cliente el que se encarge de transformarlo,
MM, va a depender de cuanta info sea la que estás enviando, para que la transformacion no sea un poco pesada.

Ahora tambien es imporante que tu envío a través de SOAP lo definas bien así como el .disco porque de nada serviría tener tantos medios de seguridad si puedo descubrir tu servicio.

Es solo un comentario adicional.

Seguimos por aqui por cualquier cosa..
  #10 (permalink)  
Antiguo 30/04/2005, 11:58
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
ok, gracias rootk, seguiré indagando en la cuestión y ya te contaré
  #11 (permalink)  
Antiguo 03/05/2005, 00:48
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Rootk, una dudilla de lo que dices, imagina que descubres mi servicio, éste está alojado bajo SSL, requiere autentificación (login y pass) para devolver algo, y lo que devuelve además va encriptado y vuelto a encriptar con llaves distintas para cada cliente y sólo disponibles en los mismo.

¿A que te refieres con lo de defición del SOAP para que sea seguro??No es bastante serguro así???
  #12 (permalink)  
Antiguo 03/05/2005, 08:34
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:
No es bastante serguro así???
En este caso lo que estas manejando tiene cierta seguridad, porque recuerda que no hay sistema 100% seguro, lo interesante es tener cuidado en como van a viajar los paquetes, y por lo que comentas vienen encriptados verdad..?? si es así.., es un poco mas dificl de saber lo que viaja.. aun usando algun sniffer, pero ya contemplaste la parte de como actua tu servicio si lo llamo desde un proxy ?

Ademas, esta bien que los servicios requieran autentificacion, pero tambien quisiera saber si estas contemplando de que pasa cuando el usuario se firma..?? al momento de generarse el post el user y password viajan seguros..?? o viajan tal cual y despues pasan por el ssl ?

En fin.. son cosas que van a depender del tipo de informacion que manejes y que ten seguro desees hacer tu sistema, pero a grandes razgos creo que con lo que estas manejando podría ser suficiente (aclaro que va a depender)

Salu2
  #13 (permalink)  
Antiguo 03/05/2005, 09:06
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
en teoría la referencia de la aplicación que utiliza el sevice es https (o deberá serlo), además el servidor sólo admitirá peticiones por el puerto 443, yo creo que será bastante pero seguiré estudiando el tema
  #14 (permalink)  
Antiguo 06/05/2005, 00:50
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Hola de nuevo rootk (pensarás que soy un pesado), pero bueno esto lo estoy avanzando poco a poco. Bien el WebService lo tengo creado y a la hora de consumirlo, p.ej a través de un WinForms, no tengo problema, recibo el string de p.m. pero cuando lo he intentado pasar a una aplicación para Smart Device y con el Emulador de Pocket PC 2002, (siempre en pruebas), me salta una excepción de tipo

system.net.WebException, cuyo mensaje es que no se ha podido conectar con el servidor remoto, y me está rallando un poquito bastante,

el new me lo hace bien, salta el error al momento de llamar a la función de devolver el string

?????????????????????
  #15 (permalink)  
Antiguo 09/05/2005, 04:24
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Esto sigue sin reconocer el WebService, ya pienso que puede ser porque intenta utilizar WAP o yo que se para conectar y por eso da ese error.


Sigo investigando
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 17:14.