我尝试从包含超过1000个文件的目录中读取FTP中的文件列表。
我这样做:
public static FtpWebRequest GetRequest(string uri)
{
FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
req.Credentials = new NetworkCredential("login", "password");
req.KeepAlive = false;
req.UseBinary = false;
req.UsePassive = true;
return req;
}
public static bool CheckConnection()
{
FtpWebResponse respSize = null;
try
{
FtpWebRequest reqFTP = GetRequest(@"ftp://myftp.com");
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
respSize = (FtpWebResponse)reqFTP.GetResponse();
respSize.Close();
respSize = null;
reqFTP.GetResponse().Close();
return true;
}
catch (Exception ex)
{
//...
}
finally
{
if (respSize != null)
respSize.Close();
}
return false;
}
我收到错误:
远程服务器返回错误:
(451)处理中的本地错误。
在 System.Net.FtpWebRequest.SyncRequestCallback(对象 OBJ)
在 System.Net.FtpWebRequest.RequestCallback(对象 OBJ)
在 System.Net.CommandStream.Dispose(布尔 处置)
在System.IO.Stream.Close()
在System.IO.Stream.Dispose()
在 System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream,Object owningObject, Int32 creationTimeout,布尔值 canReuse)
在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage 阶段)
在 System.Net.FtpWebRequest.SyncRequestCallback(对象 OBJ)
在 System.Net.FtpWebRequest.RequestCallback(对象 OBJ)
在 System.Net.CommandStream.Abort(例外 E)
在 System.Net.CommandStream.CheckContinuePipeline()
在 System.Net.FtpWebRequest.DataStreamClosed(CloseExState closeState)
在 System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
在 System.Net.FtpDataStream.Dispose(布尔 处置)
在System.IO.Stream.Close()
在 System.Net.FtpWebResponse.Close()
在CheckConnection()
有谁知道发生了什么事?
问候 马尔钦
答案 0 :(得分:1)
来自RhinoSoft(FTP软件Serv-U的制造商):
“可以发送451回复代码以响应任何启动文件传输的命令。这是一个瞬态否定响应,这意味着错误条件是临时的。它通常是为响应服务器遇到意外而发送的处理正在传输或接收的数据时出现本地错误。在这种情况下,建议客户端重新启动FTP事务并重试。“ [1]
因此,软件和FTP服务器之间的通信可能存在问题,而不一定是您软件本身的问题。
增加Timeout
FtpWebRequest
属性的长度不会有什么坏处,但根据我的研究,这可能不是原因。