【发布时间】:2015-04-24 15:27:08
【问题描述】:
因此可以在HttpClient 上设置两个超时属性:HttpClient.TimeOut 和WebRequestHandler.ReadWriteTimeout。
第一个只是整个请求/响应的超时,所以如果下载/上传时间比这更长,我很不走运并且在传输过程中被切断,没有任何问题。这显然可以通过将超时设置为无限来覆盖,但我不确定这会产生什么后果。
现在后者 (ReadWriteTimeOut) - 至少在我的理解中 - 应该一直传播到 NetworkStream,它会影响请求/响应流在超时之前可以阻塞(空闲)多长时间。
HttpClient 正在使用 HttpWebRequest 方法的异步版本,但正如 here 所述:
在异步请求的情况下,客户端应用程序负责实现自己的超时机制。
根本没有解释他们想到的超时机制(网络流空闲超时?整个 HTTP GET 超时?等等),这让我非常困惑。
所以我的问题是,HttpClient 究竟如何处理网络/协议超时?我想使用 HttpClient 上传/下载潜在的大文件,因此我将 HttpClient.TimeOut 设置为无限。但我担心这样做会使应用程序面临无限等待服务器/网络拒绝完成的某些事件的风险。
【问题讨论】:
-
您是否获得了有关这些超时的更多详细信息?
-
@SandeepKumar 除了我对下面“Leo Y”回答的 cmets 之外,我并没有真正了解更多细节。有太多的层需要反编译和通过。我建议使用反复试验来测试您感兴趣的超时情况。
-
好的。还有一件事,如何使用 httpClient 对象获取 WebRequestHandler.ReadWriteTimeout?
-
@SandeepKumar 将WebRequestHandler 的实例传递给
HttpClient的构造函数。在你这样做之前,将WebRequestHandler的ReadWriteTimeout属性设置为任何你想要的。 This article 可能有助于解释一些事情。 -
谢谢你,我学到了一些新东西:)
标签: c# .net http networking httpclient