Invocar Web Services

07/04/2005 - 23:05 por Ana | Informe spam
Tengo un problema con la invocacion de un metodo de un
servicio web:
1-Agrege una referencia web del servicio web a mi proyecto
2-En mi proyecto agregue lo siguiente e invoco al metodo
pasandole un parametro de tipo system.io.stream:

string url = Server.MapPath("")+"..\\Publico\\xml.xml";
System.IO.StreamReader data = new StreamReader(url);
System.IO.Stream tmp;
tmp = data.BaseStream;
Servicio.Recepcion proxy = new Servicio.Recepcion();
proxy.Recepcion_Pedidos(tmp );<error sale aqui
3-Al compilar me sale un error en la ultima linea y dice
que "no se puede convertir un tipo System.IO.Stream a
Servicio.Stream porque Servicio.Stream es una clase
Abstract" y como es abstracta tampoco puedo crear una
referencia a un objeto.
Mi metodo WebService tiene el metodo Recepcion_Pedidos que
recibe un parametro System.IO.Stream y cuando lo invoco
de otro proyecto el parametro de entrada se vuelve
Servicio.Stream .
ALguien me puede ayudar a entender esto y darme la
solucion a mi problema.
Gracias
 

Leer las respuestas

#1 A.Poblacion
08/04/2005 - 07:50 | Informe spam
No puedes pasarle un Stream a un servicio web. El stream está conectado a
algún dispositivo de entrada salida, por ejemplo, a un archivo si es un
FileStream. La máquina en donde se ejecuta el servicio web lógicamente no
tiene acceso al archivo que hay en la máquina llamante, y no tiene sentido
que reciba un Stream.

En general, cuando le pasas un argumento al servicio web, el argumento tiene
que serializarse (convertirse en una cadena de caracteres) para poderlo
transmitir por la linea. Eso implica que no podrás pasar aquello que no sea
posible serializar.

Si no tienes más remedio que usar el stream desde la máquina remota,
entonces en lugar de un servicio web puedes hacer la llamada mediante
Remoting. Remoting sí que permite pasar un proxy a una clase local (heredada
de MarshalByRefObject), de forma que cuando la máquina remota llama a
métodos de esa clase, los métodos se ejecutan en la máquina llamante. Con un
mecanismo de este tipo sí que podrías manipular el Stream local desde la
máquina remota. Pero en Web Services no existe este mecanismo.

"Ana" wrote in message
news:03ed01c53bb5$7b9f8b60$
Tengo un problema con la invocacion de un metodo de un
servicio web:
1-Agrege una referencia web del servicio web a mi proyecto
2-En mi proyecto agregue lo siguiente e invoco al metodo
pasandole un parametro de tipo system.io.stream:

string url = Server.MapPath("")+"..\\Publico\\xml.xml";
System.IO.StreamReader data = new StreamReader(url);
System.IO.Stream tmp;
tmp = data.BaseStream;
Servicio.Recepcion proxy = new Servicio.Recepcion();
proxy.Recepcion_Pedidos(tmp );<error sale aqui
3-Al compilar me sale un error en la ultima linea y dice
que "no se puede convertir un tipo System.IO.Stream a
Servicio.Stream porque Servicio.Stream es una clase
Abstract" y como es abstracta tampoco puedo crear una
referencia a un objeto.
Mi metodo WebService tiene el metodo Recepcion_Pedidos que
recibe un parametro System.IO.Stream y cuando lo invoco
de otro proyecto el parametro de entrada se vuelve
Servicio.Stream .
ALguien me puede ayudar a entender esto y darme la
solucion a mi problema.
Gracias

Preguntas similares