在大文件(~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();
关于我做错了什么或更好的大文件练习的线索?
您是在每次尝试后还是仅在后续尝试后收到503?
您是否尝试过设置禁用KeepAlive?
ftp.KeepAlive = false;
我会尝试一个更强大的ftp客户端库,一个基本的免费可以在qazxsw poi。
我同意最小化NetworkCredential对象的数量可以解决问题。我遇到了这个问题并创建了一个CredentialCache并添加了一次凭证。没有更多的ftp错误。
出于某种原因,有几个人似乎注意到只使用一个NetworkCredential对象的实例而不是为每个FtpWebRequest使用一个新实例。这至少对我有用。
该错误是由于没有时间让服务器注销。使用try语句,当发生此错误时,创建一个短时间延迟并重新开始。这将允许服务器从最后的rrequest注销。
就我而言,服务器(属于客户端)已更改为仅接受TLS(SSL)请求。他们当然没有告诉我们这一点,503错误消息没有帮助!
所以我们需要像这样使用sourceforge:
.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;
我的理解是这一行具有全局效果,所以只需要在应用程序启动时调用它。
:o)