【问题标题】:C# FTP ListDirectoryDetails ProblemC# FTP ListDirectoryDe​​tails 问题
【发布时间】:2011-06-06 15:12:32
【问题描述】:

我尝试从包含超过 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(对象 对象)

在 System.Net.FtpWebRequest.RequestCallback(对象 对象)

在 System.Net.CommandStream.Dispose(布尔值 处理)

在 System.IO.Stream.Close()

在 System.IO.Stream.Dispose()

在 System.Net.ConnectionPool.Destroy(PooledStream pooledStream)

在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream,对象拥有对象, Int32 创建超时,布尔值 可以重复使用)

在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage 阶段)

在 System.Net.FtpWebRequest.SyncRequestCallback(对象 对象)

在 System.Net.FtpWebRequest.RequestCallback(对象 对象)

在 System.Net.CommandStream.Abort(异常 e)

在 System.Net.CommandStream.CheckContinuePipeline()

在 System.Net.FtpWebRequest.DataStreamClosed(CloseExState 关闭状态)

在 System.Net.FtpDataStream.System.Net.ICloseEx.CloseEx(CloseExState 关闭状态)

在 System.Net.FtpDataStream.Dispose(布尔值 处理)

在 System.IO.Stream.Close()

在 System.Net.FtpWebResponse.Close()

在 CheckConnection() 处

有人知道怎么回事吗?

问候 马辛

【问题讨论】:

  • 它是否适用于较少数量的文件?
  • 是的,它适用于少量文件

标签: c# ftp


【解决方案1】:

来自 RhinoSoft(FTP 软件 Serv-U 的制造商):

" 451 回复代码可能会响应任何启动文件传输的命令。它是一个暂时的否定响应,这意味着错误条件是暂时的。它通常是为了响应服务器遇到意外而发送的处理正在传输或接收的数据时发生本地错误。在这种情况下,建议客户端重新启动 FTP 事务并重试。” [1]

因此,这可能是您的软件和 FTP 服务器之间的通信问题,不一定是您的软件本身的问题。

增加FtpWebRequestTimeout 属性的长度不会有什么坏处,但根据我的研究,这不太可能是原因。

【讨论】:

  • 你有什么想法吗?这种“临时”问题每次都会发生。也许管理员必须在服务器上设置一些标志?
  • 我在一个包含 2000 个文件的 FTP 服务器上测试了您的代码。不幸的是,该错误相当普遍,它是在 FTP 服务器上生成的,而不是在您的软件中生成的。您最好的选择是与服务器所有者合作。您对标准 FTP 客户端有任何问题吗?
  • 黑暗中的最后一枪:尝试将 req.UsePassive 设置为“false”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多