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

时间:2008-10-31 04:22:48

标签: c# .net ftp

在大文件(~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 个答案:

答案 0 :(得分:4)

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

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

ftp.KeepAlive = false;

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

出于某种原因,有几个人似乎注意到只使用一个NetworkCredential对象的实例而不是为每个FtpWebRequest使用一个新实例。这至少对我有用。

答案 3 :(得分:0)

错误是由于没有时间让服务器注销。使用try语句,当发生此错误时,创建一个短时间延迟并重新开始。这将允许服务器从最后的rrequest注销。

答案 4 :(得分:0)

就我而言,服务器(属于客户端)已更改为仅接受TLS(SSL)请求。他们当然没有告诉我们这一点,503错误消息没有帮助!

所以我们需要像这样使用.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;

我的理解是这一行具有全局效果,因此只需在应用程序启动时调用它。

:○)