【问题标题】:c# HttpCliennt GetAsync ResponseHeadersRead Timeoutc# HttpClient GetAsync ResponseHeadersRead Timeout
【发布时间】:2016-01-22 09:44:06
【问题描述】:

现状:

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

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

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

处收到超时异常
System.Net.ConnectStream.Read

我的问题:

有没有办法改变这个超时?

【问题讨论】:

  • 我猜超时是在你的服务器端。试试这个其他 URI,它会在发送响应的第一部分之前等待 90 秒:heyhttp.org?slow=90000

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


【解决方案1】:

您尝试过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; ...}

【讨论】:

  • 是的,但不幸的是,这对所描述的行为没有影响。
【解决方案2】:

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

这是我正在寻找的设置:

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 秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多