C# 上载时网络客户端超时

C# 上载时网络客户端超时,c#,file,upload,webclient,C#,File,Upload,Webclient,我知道WebClient没有timeout属性。我四处搜索并找到了不同的代码,您可以在其中从httpwebrequest继承webclient并设置超时,例如: class MyWebClient : WebClient { protected override WebRequest GetWebRequest(Uri address) { WebRequest request = base.GetWebRequest(address); i

我知道WebClient没有timeout属性。我四处搜索并找到了不同的代码,您可以在其中从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在服务器端运行,并且设置了所有超时/maxupload值

例外消息是:

the request was aborted the request was canceled

请帮帮我

httpWebRequest的默认值为100秒,因此代码中的某些设置不正确

您是否尝试将
.KeepAlive=true

将其设置为false可以

使用HTTP/1.1时,默认情况下“保持活动”处于启用状态。将KeepAlive设置为false可能会导致向服务器发送连接:Close头

这是有道理的,因为您似乎正在正确设置超时。你可以再检查一遍


所以,这个问题还有一个答案,将错误消息链接到keep alive属性。

另一个答案中的代码对我有效,我只将第9行更改为:

((HttpWebRequest)request).Timeout = System.Threading.Timeout.Infinite;

如果keepalive是真的,你会得到同样的问题吗。False会将连接关闭头发送到服务器
(as)。
是一种非常糟糕的做法;如果
不是
类型,它将抛出
NullReferenceException
,这在诊断问题时毫无帮助。改用直接强制转换:
((HttpWebRequest)请求)。超时