上传时webclient超时
Posted
技术标签:
【中文标题】上传时webclient超时【英文标题】:webclient timeout while uploading 【发布时间】:2012-03-03 05:09:32 【问题描述】:我知道 WebClient 没有超时属性。我四处搜索,发现不同的代码,您可以在其中从 httpwebrequest 继承 webclient 并设置超时例如:
class MyWebClient : WebClient
protected override WebRequest GetWebRequest(Uri address)
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
(request as HttpWebRequest).KeepAlive = false;
(request as HttpWebRequest).Timeout = 25000; //(tried different values)
return request;
但这里似乎没有任何效果。超时恰好在 100 秒后发生。我正在尝试通过我制作的这个客户端应用程序上传大文件。 php 在服务器端运行,所有超时/最大上传值都已设置。
异常信息是:
the request was aborted the request was canceled
请帮帮我。
【问题讨论】:
如果 keepalive 是真的,你会遇到同样的问题。 False 可以向服务器发送连接关闭头 【参考方案1】:另一个答案中的代码对我有用,我只将第 9 行更改为:
((HttpWebRequest)request).Timeout = System.Threading.Timeout.Infinite;
【讨论】:
(<value> as <type>).<something>
是一个非常糟糕的做法;如果<value>
不是<type>
类型,它将抛出NullReferenceException
,这在诊断问题时根本没有帮助。改用直接转换:((HttpWebRequest)request).Timeout
【参考方案2】:
httpWebRequest 的默认值为 100 秒,因此在代码中没有正确设置。
你试过设置.KeepAlive = true;
MSDN 表示设置为 false 即可
使用 HTTP/1.1 时,默认情况下启用 Keep-Alive。将 KeepAlive 设置为 false 可能会导致向服务器发送 Connection: Close 标头。
这是有道理的,因为您似乎正确设置了超时。你可以仔细检查here
This SO 问题也有一个答案,将错误消息链接到 keep alive 属性。
【讨论】:
以上是关于上传时webclient超时的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot WebClient OAuth - 同时命中多个请求时超时