Pregunta

Estoy intentando leer un flujo de respuesta Http dos veces a través de lo siguiente:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
RssReader reader = new RssReader(stream);
do
{
  element = reader.Read();
  if (element is RssChannel)
  {
    feed.Channels.Add((RssChannel)element);
  }
} while (element != null);

StreamReader sr = new StreamReader(stream);
feed._FeedRawData = sr.ReadToEnd();

Sin embargo, cuando el código de StreamReader se ejecuta, no se devuelven datos porque la secuencia ya ha llegado al final. Intenté restablecer la transmisión a través de stream.Position = 0 pero esto arroja una excepción (creo que porque la transmisión no puede cambiar su posición manualmente).

Básicamente, me gustaría analizar la secuencia para XML y tener acceso a los datos sin procesar (en formato de cadena).

¿Alguna idea?

¿Fue útil?

Solución

Cópialo primero en un nuevo MemoryStream. Luego puede volver a leer el MemoryStream tantas veces como desee:

Stream responseStream = CopyAndClose(resp.GetResponseStream());
// Do something with the stream
responseStream.Position = 0;
// Do something with the stream again


private static Stream CopyAndClose(Stream inputStream)
{
    const int readSize = 256;
    byte[] buffer = new byte[readSize];
    MemoryStream ms = new MemoryStream();

    int count = inputStream.Read(buffer, 0, readSize);
    while (count > 0)
    {
        ms.Write(buffer, 0, count);
        count = inputStream.Read(buffer, 0, readSize);
    }
    ms.Position = 0;
    inputStream.Close();
    return ms;
}

Otros consejos

¿has intentado restablecer la posición del flujo? Si esto no funciona, puede copiar el flujo a un MemoryStream y allí puede restablecer la posición (es decir, a 0) con la frecuencia que desee.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top