Ich versuche, einen HTTP-Antwortstrom zweimal über die folgenden zu lesen:Wie kann ich einen HTTP-Antwort-Stream zweimal in C# lesen?
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();
jedoch, wenn der Stream Code ausführt dort zurückgegeben keine Daten, weil der Strom das Ende erreicht hat jetzt. Ich habe versucht, den Stream über stream.Position = 0 zurückzusetzen, aber dies löst eine Ausnahme aus (ich denke, weil die Position des Streams nicht manuell geändert werden kann).
Grundsätzlich möchte ich den Stream für XML analysieren und Zugriff auf die Rohdaten (im String-Format) haben.
Irgendwelche Ideen?
Ein winziger Vorschlag hier - ich oft Anrufe sehen zu suchen, wo die Eigenschaft Position einfacher und besser lesbar wäre, z.B. ms.Position = 0; Nur ein Gedanke für zukünftigen Code. –
Ein weiterer Kommentar - die oben genannten endet nicht den eingehenden Stream, jemals schließen. Es könnte sich lohnen, eine "CopyAndClose" -Methode zu erstellen, die * den Stream schließt, nur damit Sie die einfache Aufrufsyntax beibehalten können. –
Wow, komm her zu meinen Helden .. Ich lese gerade dein Buch, Mr. Skeet :-) Was du zum Schließen (und Erzählen mit dem Methodennamen) vorgeschlagen hast, ist genau das, was ich über den obigen Code dachte. – VVS