Question

J'essaie de lire deux fois un flux de réponses HTTP à l'aide des éléments suivants:

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();

Toutefois, lorsque le code StreamReader est exécuté, aucune donnée n'est renvoyée car le flux a maintenant atteint la fin. J'ai essayé de réinitialiser le flux via stream.Position = 0 mais cela jette une exception (je pense parce que le flux ne peut pas avoir sa position modifiée manuellement).

En gros, j'aimerais analyser le flux pour XML et avoir accès aux données brutes (au format chaîne).

Des idées?

Était-ce utile?

La solution

Copiez-le d'abord dans un nouveau MemoryStream. Ensuite, vous pouvez relire le MemoryStream autant de fois que vous le souhaitez:

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;
}

Autres conseils

avez-vous essayé de réinitialiser la position du flux? si cela ne fonctionne pas, vous pouvez copier le flux sur un MemoryStream et réinitialiser la position (c'est-à-dire sur 0) aussi souvent que vous le souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top