【问题标题】:Error when trying to download a file using .net FtpWebRequest class尝试使用 .net FtpWebRequest 类下载文件时出错
【发布时间】:2009-05-06 02:55:20
【问题描述】:

错误信息是:

服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同。

当我尝试在下面调用 GetResponse() 方法时收到此消息... 请帮忙。

这是我的 C# 代码:

FileStream outputStream = new FileStream(feedXmlPath + "\" + "testXml", FileMode.Create);

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpURL + "/" + zipFileName);

        request.UseBinary = true;

        request.Credentials = new NetworkCredential(userName, password);

        request.KeepAlive = false;

        request.Method = WebRequestMethods.Ftp.DownloadFile;

      FtpWebResponse response = (FtpWebResponse)request.GetResponse();
      Stream ftpStream = response.GetResponseStream();

      long cl = response.ContentLength;
      int bufferSize = 2048;
      int readCount;
      byte[] buffer = new byte[bufferSize];

      readCount = ftpStream.Read(buffer, 0, bufferSize);


        while (readCount > 0)
      {
          outputStream.Write(buffer, 0, readCount);
          readCount = ftpStream.Read(buffer, 0, bufferSize);
      }

      ftpStream.Close();
      outputStream.Close();
      response.Close();

【问题讨论】:

    标签: c# ftp


    【解决方案1】:

    如果您使用 NAT,出于安全原因,不允许使用 FTPWebRequest。在Connect 上查看这篇文章。

    MSDN 上的这篇帖子也可能会有所帮助。

    【讨论】:

    • 感谢 paul 提供您的 cmets...我尝试了上面 MSDN 链接中提到的代码,但仍然没有运气...!
    • 再次感谢 paul 的输入...在我的代码中使用以下行后,我现在可以下载文件:request.Proxy = new WebProxy(myProxyServerIP);
    【解决方案2】:

    尝试切换 Passive 值以查看哪个有效:

        request.UsePassive = false;
    

    这可能取决于机器(客户端和服务器)之间的防火墙。

    我注意到如果我通过我们的防火墙,我需要将其保留为 True,否则它将返回异常:

    远程服务器返回错误:(500) 语法错误,命令 无法识别。

    但是,如果我在防火墙后面(比如两台机器在数据中心内直接相互连接),那么我需要将其设置为 False,否则它将返回异常:

    服务器响应 PASV 命令返回的地址与 FTP 连接的地址不同 制作。

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      相关资源
      最近更新 更多