WebClient.UploadFile失败,“请求已中止:请求已取消。”

时间:2011-08-15 03:29:11

标签: web-applications

我正在尝试使用WebClient.UploadFile将文件上传到HTTP网址。对于1M,2M等小文件,上传成功。但是对于像12M这样的大文件,我得到了这个例外:

The request was aborted: The request was canceled.

之前有没有人遇到过这个问题,你能分享一下这个问题吗?

一些信息:

  • 服务器正在使用ASP.NET 3.5。
  • 我在上传时使用的HTTP方法是“PUT”。

2 个答案:

答案 0 :(得分:7)

这是smwikipedia的回答中提到的解决方案。我已经添加了禁用写入流缓冲的功能,这可以帮助解决内存不足的问题。

public class ExtendedWebClient : WebClient
{
    public int Timeout { get; set; }
    public new bool AllowWriteStreamBuffering { get; set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = Timeout;
            var httpRequest = request as HttpWebRequest;
            if (httpRequest != null)
            {
                httpRequest.AllowWriteStreamBuffering = AllowWriteStreamBuffering;
            }
        }
        return request;
    }

    public ExtendedWebClient()
    {
        Timeout = 100000; // the standard HTTP Request Timeout default
    }
}

用法:

var webClient = new ExtendedWebClient();
webClient.Timeout = Timeout.Infinite;
webClient.AllowWriteStreamBuffering = false;
webClient.UploadFile(url, filePath);

答案 1 :(得分:0)

我按照这里解决了它: Extend the timeout value of WebClient

顺便说一下,由于WebClient的缓冲导致OutOfMemory异常: Are you getting OutOfMemoryExceptions when uploading large files?