2009-08-03 15 views
18

Estoy intentando leer desde una URL en un objeto System.IO.Stream. He intentado utilizar¿Es posible leer desde una URL a un objeto System.IO.Stream?

Dim stream as Stream = New FileStream(msgURL, FileMode.Open) 

pero me da un error que los formatos de URI no son compatibles con objetos FileStream. ¿Hay algún método que pueda usar que herede de System.IO.Stream que pueda leer desde una URL?

Respuesta

18

VB.Net:

Using req As WebRequest = HttpWebRequest.Create("url here"), _ 
     stream As Stream = req.GetResponse().GetResponseStream() 

End Using 

C#:

using(WebRequest req = HttpWebRequest.Create("url here")) 
using (Stream stream = req.GetResponse().GetResponseStream()) 
{ 

} 
+4

si no estoy equivocado req object debe ser WebRequest, no un objeto HttpWebRequest .. –

+0

Al usar este código no pude deserializar el contenido en el otro extremo de la solicitud web. Sugiero usar la respuesta de Thomas Levesque a continuación, ya que funcionó perfectamente. –

31

Uso WebClient.OpenRead:

Using wc As New WebClient() 
    Using stream As Stream = wc.OpenRead(msgURL) 
     ... 
    End Using 
End Using 
+1

Ah, no sabía que existiera OpenRead. Lo recordaré. –

+1

No lo sabía tampoco ... Supuse que existía algo así, y lo revisé en la biblioteca de MSDN;) –

+0

Por supuesto, la manera más simple ... Agregar código para mostrar el cierre de la transmisión y deshacerse del cliente web, y es simplemente perfecto. :) – Guffa

2

Sí, se puede utilizar un objeto HttpWebRequest para obtener una secuencia de respuesta:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream receiveStream = response.GetResponseStream(); 
// read the stream 
receiveStream.Close(); 
response.Close(); 

(Desmontado y simplificado desde the docs).

Cuestiones relacionadas