5

在大文件(~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();

关于我做错了什么或更大文件的更好做法的任何线索?

4

5 回答 5

4

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

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

ftp.KeepAlive = false;

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

于 2008-11-05T01:27:58.890 回答
4

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

于 2010-05-05T15:11:46.437 回答
3

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

于 2010-03-09T15:07:18.760 回答
0

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

于 2014-02-18T17:45:25.680 回答
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;

据我了解,这条线具有全局影响,因此只需要在您的应用程序启动时调用它即可。

:o)

于 2016-09-07T11:08:48.387 回答