Http 스트리밍 API에 액세스하기위한 REST 서비스 용 C# 클라이언트를 작성합니다. 나는 스트림을 열고 서버에 의해 끝없이 흐르는 스트림에서 메시지를 받았다. 스트림에서 외부 명령을 읽을 때 중지해야합니다. HttpClient가 구현에 사용됩니다. Variable streamingActive는 reader.EndOfStream이 결코 true 값을 반환하지 않으므로 스트림에서 읽기를 중지하는 데 사용됩니다.무한 Http 스트림에서 시간 초과
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)
열 (가설) 영원히 스트림을 유지하기 위해 어떤 방법이 있나요?