【发布时间】:2015-09-10 14:57:51
【问题描述】:
我正在使用 C# 从无尽的 http-stream 中获取数据。之前用过TCP Client,现在想加状态码异常,用HttpWebResponse做起来容易多了。我得到了响应,但问题是我无法读取来自服务器的块。一切看起来都很好,但我一定错过了什么。调试显示执行卡在 ReadLine()。我还可以看到流缓冲区中有一些数据。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://" + url + "/stream/" + from + "?token=" + token);
using(HttpWebResponse res = (HttpWebResponse)req.GetResponse())
using(StreamReader streadReader = new StreamReader(res.GetResponseStream(),Encoding.UTF8)){
//Start parsing cycle
while(!streadReader.EndOfStream && !worker.CancellationPending) {
string resultLine = streadReader.ReadLine();
System.Diagnostics.Trace.WriteLine(resultLine);
if(!resultLine.StartsWith("{")) continue;
newQuote quote = JsonConvert.DeserializeObject<newQuote>(resultLine);
worker.ReportProgress(0, quote);
}
}
【问题讨论】:
-
那么可能有很长的行或根本没有换行符?代码看起来不错。
-
这种错误处理真的很让人担心:
if(!resultLine.StartsWith("{")) continue;。删除那个。 -
@usr 或者创建一个更好的魔法来确定块的结束。
-
是的,这有点老套,必须承认这一点。它是从 TCP 客户端离开的,并不是每个块都是那里的对象 :) 我会删除它,谢谢。 @usr,你是对的。我正在使用 ReadLine 但从未从服务器端发送 \r\n。
标签: c# stream httpwebrequest