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)
をストリームを維持する方法はあります永遠に(仮に)を開きましたか?