代码之家  ›  专栏  ›  技术社区  ›  Austin Salonen gmlacrosse

.Net:FtpWebRequest“(503)命令序列错误”错误

  •  4
  • Austin Salonen gmlacrosse  · 技术社区  · 16 年前

    在大文件(~200+MB)上,读取流时会出现503错误。

    ftp = (FtpWebRequest)WebRequest.Create(new Uri(address.AbsoluteUri + @"/" + file.Name));
    ftp.Credentials = new NetworkCredential(username, password);
    ftp.Method = WebRequestMethods.Ftp.DownloadFile;
    
    response = (FtpWebResponse)ftp.GetResponse();
    

    5 回复  |  直到 16 年前
        1
  •  4
  •   John Lemp Chris Heald    16 年前

    您是在每次尝试后收到503还是仅在后续尝试后收到503?

    您是否尝试过设置禁用KeepAlive?

    ftp.KeepAlive = false;
    

    我会尝试一个更rubust的ftp客户端库,一个基本的免费库 sourceforge

        2
  •  4
  •   bmacadam    14 年前

    我同意最小化NetworkCredential对象的数量可以解决这个问题。我遇到了这个问题,创建了一个凭证缓存,并将每个凭证添加了一次。没有更多的ftp错误。

        3
  •  3
  •   adzm    15 年前

    出于某种原因,一些人似乎已经注意到,只使用NetworkCredential对象的一个实例而不是为每个FtpWebRequest使用一个新实例取得了一些成功。至少对我来说是这样。

        4
  •  0
  •   Mike Miller    11 年前

    该错误是由于不允许服务器有时间注销所致。使用try语句,当发生此错误时,创建一个短时间延迟并重新开始。这将允许服务器从上一次请求注销。

        5
  •  0
  •   mrrrk    8 年前

    所以我们需要使用 .EnableSsl 这样地:

            var ftp = WebRequest.Create(uri) as FtpWebRequest;
            if (ftp != null) {
                ftp.EnableSsl = true; // <- the new bit
                ftp.Credentials = myCredentials;
                ftp.KeepAlive = false; // <- you may or may not want this
            }
            return ftp;
    

    为了忽略证书错误,我还需要添加以下内容:

    System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                    (sender, certificate, chain, sslPolicyErrors) => true;
    

    :o)