0

好吧,这就是我正在尝试建立一个轮询系统来从几个激光系统中提取日志文件的方法,每个激光系统都有自己的 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 批处理文件,因为让所有东西都在程序中运行会更加优雅和易于使用,这真的会让人感到难过。有什么想法吗?

4

1 回答 1

0

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

request.UsePassive = true

另外,从文档中:

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

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

于 2013-06-25T20:39:12.513 回答