Ich habe Probleme beim Lesen einer "Chunked"-Antwort, wenn Sie einen StreamReader verwenden, um den von GetResponseStream() einer HttpWebResponse zurückgegebenen Stream zu lesen:
// response is an HttpWebResponse
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd(); // throws exception...
Wenn die reader.ReadToEnd()
Methode aufgerufen wird, erhalte ich die folgende System.IO.IOException: Es ist nicht möglich, Daten aus der Transportverbindung zu lesen: Die Verbindung wurde geschlossen.
Der obige Code funktioniert einwandfrei, wenn der Server eine "non-chunked" Antwort zurückgibt.
Der einzige Weg, den ich gefunden habe, um es zum Funktionieren zu bringen, ist die Verwendung von HTTP/1.0 für die erste Anfrage (anstelle von HTTP/1.1, dem Standard), aber das scheint ein lahmer Workaround zu sein.
Irgendwelche Ideen?
@Chuck
Ihre Lösung funktioniert ziemlich gut. Es wird immer noch die gleiche IOException beim letzten Read() geworfen. Aber nachdem ich den Inhalt des StringBuilders untersucht habe, sieht es so aus, als ob alle Daten empfangen wurden. Vielleicht muss ich also nur die Read() in eine try-catch verpacken und den "Fehler" schlucken.
0 Stimmen
Um Chunked Response zu lesen, müssen Sie Folgendes tun de.wikipedia.org/wiki/Chunked_transfer_encoding
0 Stimmen
Ich erlebe dieses Verhalten mit .NET 4.6 bei der Verbindung mit der PowerDNS 3.4.5 HTTP REST API. Die Workarounds helfen nicht. Wenn ich die Ausnahme verschlucke, verliere ich einen Teil der Antwort.