【问题标题】:webclient timeout while uploading上传时webclient超时
【发布时间】: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 可以向服务器发送连接关闭头

标签: c# file upload webclient


【解决方案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 属性。

【讨论】:

    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 2013-01-11
    • 2011-09-22
    • 2020-01-30
    • 2012-03-31
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    相关资源
    最近更新 更多