【问题标题】:Error: (502) Command not implemented. Using FtpWebResponse .net错误:(502) 命令未执行。使用 FtpWebResponse .net
【发布时间】:2013-06-25 20:27:13
【问题描述】:

好的,我正在尝试建立一个轮询系统,以从多个激光系统中提取日志文件,每个系统都有自己的 ftp。但是,我在尝试调用 FtpWebResponse 调用以下载日志文件时遇到了困难,以下是我正在使用的代码:

// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://192.168.10.140/param.dat");
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential("user", "pass");
request.UsePassive = false;
request.Proxy = null;
request.UseBinary = true;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

所以我冻结了最后一行:“远程服务器返回错误:(502) 命令未实现。”

我有几种不同的方法从系统中获取文件,只是为了看看它是否是我缺少的某种设置,这是我的结果:

  • Microsoft CMD.exe:连接良好,可以下载文件并执行标准 ftp 命令
  • Internet Explorer:输入文件地址即可下载文件
  • Firefox:“远程服务器返回错误:(502) 命令未实现。”
  • Chrome:“错误 606 (net::ERR_FTP_COMMAND_NOT_SUPPORTED):未知错误。”

现在我无法获得关于激光系统上实际 ftp 设置的太多信息,因为我不会在这里讨论一个很长的故事,但从我所看到的情况来看,它可能使用了某种遗留协议IE 和 CMD 支持,否则我遗漏了一些明显的东西。我试图翻转 FtpWebRequest 设置,但似乎没有任何效果。我真的很想使用这个解决方案,而不是让程序自动构建 ftp 批处理文件,因为让所有东西都在程序中运行会更加优雅和易于使用,这真的会让人感到难过。大家有什么想法吗?

【问题讨论】:

  • Levi,你看过网上MSDN 的例子吗?这是一个链接,您可以结帐以获取一些线索/想法FtpWebResponse
  • 感谢您的链接,但我认为我已经根据其他示例正确设置了一般调用以进行下载,获得初始化响应后的下一步是将其传递到流读取器并拉取数据以这种方式输出,但我首先需要一个积极的回应。我似乎正在连接到 ftp;在查看崩溃时引发的 webexception 时,我可以看到响应的横幅消息是正确的“220 Excimer Controller FTP Server ready”(我通过 CMD.exe 进行连接)。

标签: c# .net ftp ftpwebrequest


【解决方案1】:

可能导致 502 错误的原因之一是在服务器上禁用活动模式时尝试使用它。尝试使用被动模式:

request.UsePassive = true

另外,来自documentation

URI 可以是相对的或绝对的。如果 URI 的格式为 “ftp://contoso.com/%2fpath”(%2f 是转义的 '/'),则 URI 为 绝对的,当前目录是/path。但是,如果 URI 是 形式为“ftp://contoso.com/path”,首先是 .NET Framework 日志 进入 FTP 服务器(使用由服务器设置的用户名和密码) Credentials 属性),则当前目录设置为 /路径。

尝试将您的 URI 更改为绝对形式 - 这可能有助于避免您看到的 PWD。​​p>

【讨论】:

  • No dice there :( 这是我尝试的第一个设置。我的印象是 windows CMD.exe 默认为活动并且可以正常连接。(但是我确实尝试设置被动模式但是错误代码完全没有变化)
  • 有道理。那么您是否尝试过调试实际流量,例如使用 Wireshark?
  • Hrm 这很有趣,这就是我基本上使用 IE ME 得到的结果:请求类型 I/FTP:Okay/ME:Request: PASV/FTP:502 err/ME:Request type I/FTP:Okay /ME:Request PORT IPinfo/FTP:Okay/ME:Request RETR/FTP:Starts transfer
  • 在 .net 上我得到以下信息:ME:Request OPTS utf8/FTP:502 err/ME:Request PWD/FTP:502 err/TCP 流量来回两次然后停止进一步通信跨度>
  • 所以在我看来,来自 .Net 的命令卡在 PWD 命令上,因为这两个有效的实现(IE,CMD.exe)似乎并不关心现在工作目录。所以我想问题是无论如何都要让.Net相信我放入Uri的文件路径是正确的并且可以解决它......或者其他东西:(-PS Chrome和Firefox也失败并在PWD请求时停止
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2016-03-16
  • 2021-02-08
  • 2019-03-27
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多