C# 下载大文件1gb+;无超时错误

C# 下载大文件1gb+;无超时错误,c#,download,ftp,ftpwebrequest,C#,Download,Ftp,Ftpwebrequest,我目前正在尝试从ftp位置下载一个大文件(1.13gb),它正在超时 当我检查下载时,服务器上每10分钟的下载量只有350mb。除了将request.Timeout增加到将近一小时(!!)之外,还有更好的方法来下载和流式传输这样的大型文件 以下是我当前使用的代码: private void DownloadFromFtp(IFeedProviderConfiguration configuration, string urlData) { FtpWebRequest request =

我目前正在尝试从ftp位置下载一个大文件(1.13gb),它正在超时

当我检查下载时,服务器上每10分钟的下载量只有350mb。除了将request.Timeout增加到将近一小时(!!)之外,还有更好的方法来下载和流式传输这样的大型文件

以下是我当前使用的代码:

private void DownloadFromFtp(IFeedProviderConfiguration configuration, string urlData)
{
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(urlData);
    if (!string.IsNullOrEmpty(configuration.Username))
    {
        request.Credentials = new NetworkCredential(configuration.Username, configuration.Password);
    }
    request.ReadWriteTimeout = 600000;
    request.Timeout = 600000;
    request.UseBinary = true;
    request.Method = WebRequestMethods.Ftp.DownloadFile;

    FtpWebResponse response = (FtpWebResponse)request.GetResponse();
    var stream = GetUnCompressFromStream(urlData, response.GetResponseStream());
    /*StreamReader reader = new StreamReader(responseStream);
    documentContent = reader.ReadToEnd();
    reader.Close();*/

    this.WriteToFile(stream, this._localFile);
    stream.Close();
}

只是不要设置任何超时(使用无限)。你实际上不知道要花多长时间。但是,您应该删除ReadToEnd()并执行逐块读取,一个外部线程(您不会在下载线程中执行此检查)您可以手动检查进度。如果在60秒后你没有收到任何新数据,那么你可以取消下载。你可以尝试重试。示例如下:Adriano似乎默认超时为100000(刚好超过一分钟),因此可以设置timeout=timeout.Infinite只是有点担心这样做的含义(如果有)。只是不要设置任何超时(使用Infinite)。你实际上不知道要花多长时间。但是,您应该删除ReadToEnd()并执行逐块读取,一个外部线程(您不会在下载线程中执行此检查)您可以手动检查进度。如果在60秒后你没有收到任何新数据,那么你可以取消下载。你可以尝试重试。示例如下:Adriano似乎默认超时为100000(刚好超过一分钟),因此可以设置timeout=timeout.Infinite,只是有点担心这样做的含义(如果有)。