c#HttpCliennt GetAsync ResponseHeadersRead超时

时间:2016-01-22 09:44:06

标签: c# asp.net-web-api timeout dotnet-httpclient

现状:

带有选项ResponseHeadersRead的System.Net.Http.HttpClient.GetAsync在客户端用于从服务器流式传输数据。

 Dim result = _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead)

结果将包含一个稍后写入文件的流。由于ResponseHeadersRead-Option,数据不会在第一个请求时加载,而是在访问流时稍后加载。 但是,当我从该流读取之前花费的时间超过几分钟时,我将在

处获得超时异常
System.Net.ConnectStream.Read

我的问题:

有没有办法改变超时?

2 个答案:

答案 0 :(得分:0)

您是否尝试过timeout属性?

_httpClient.Timeout = TimeSpan.FromSeconds(30); // 30 seconds
var result = _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);

您是否使用过ContinueWith

_httpClient.GetAsync(url).ContinueWith(task => { var response = task.Result; ...}

答案 1 :(得分:0)

好的,我自己找到了解决方案:

这是我一直在寻找的设置:

https://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.readwritetimeout(v=vs.110).aspx

这是客户端设置。 使用httpclient时,可以通过以下方式设置:

  Dim handler As New WebRequestHandler()
  handler.ReadWriteTimeout = 1000
  Dim httpClient = New HttpClient(handler)

默认值为300秒。