【发布时间】:2017-04-20 20:24:53
【问题描述】:
我正在为 REST 服务编写 C# 客户端以访问 Http 流 API。我应该打开流并接收服务器以无穷无尽的方式发送的消息。在从流中读取外部命令时应该停止。 HttpClient 用于实现。变量 streamingActive 用于停止从流中读取,因为 reader.EndOfStream 永远不会返回值 true。
using (HttpClient httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite);
var messagesUri = "http://127.0.0.1:8080/api/messages/progress?sender_id=7837492342";
var stream = httpClient.GetStreamAsync(messagesUri).Result;
using (var reader = new StreamReader(stream))
{
while (streamingActive && !reader.EndOfStream)
{
var currentLine = reader.ReadLine();
try
{
var psMessage = JsonConvert.DeserializeObject<PSMessage>(currentLine);
Console.WriteLine(psMessage);
}
catch (JsonReaderException exc)
{}
}
}
}
当有来自服务器的消息时,它工作正常。如果在大约 300 秒内没有来自服务器的新消息,则调用 reader.EndOfStream 抛出异常“操作已超时。”
at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Http.HttpClientHandler.WebExceptionWrapperStream.Read(Byte[] buffer, Int32 offset, Int32 count)
有没有办法让流(假设)永远打开?
【问题讨论】:
标签: c# timeout http-streaming