1

在使用标题中的库解决此问题时,我已经看到了许多示例。我看到应该工作的常见示例是:

        string destinationPath = PathInfo.FileNameConvention;
        using (FileStream fileStream = File.OpenRead(sourcePath))
        {

            using (Stream ftpStream = FTPClient.OpenWrite(string.Format("'{0}'", destinationPath), FtpDataType.ASCII))
            {
                fileStream.CopyTo(ftpStream);
            }
        }

当我执行此代码时,我在 ftpTrace 日志中收到名称长度错误。当我仅使用目标路径时,出现超时错误。我正在发送到大型机 MVS 操作系统。我可以正常连接并登录。能够通过 ftpclient.execute 方法提交站点命令。出于好奇,我也尝试通过 execute 方法提交一个 put 命令,并得到了未知的 put 命令。有人也有这个问题吗?

此外,连接工作正常,因为我已通过 cmd 提示符 ftp 手动提交文件并成功。

一些背景信息,库的 OpenWrite 方法使用发送的路径发送 STOR 命令,并将默认为二进制类型。

4

1 回答 1

1

检查您是否已将 FTP 库配置为使用主动模式(或在防火墙和大型机中启用 FTP 被动模式)

长答案:FTP 协议使用两种连接,一种是从客户端到服务器的命令连接,另一种是可以从客户端连接到服务器(被动模式)或服务器到客户端(主动模式)的数据连接。

使用不正确的模式将导致未针对该模式配置的防火墙断开您的数据连接,这将导致您遇到超时错误。

由于 Windows ftp.exe 仅支持主动模式,并且您没有在代码中设置模式,我猜大型机配置为主动模式,而您的 FTP 库默认为被动模式。被动模式现在非常普遍,因为主动模式不适用于 NAT-ing 路由器。

检查是否有更改传输模式的配置设置,但如果库仅支持被动模式,请不要感到惊讶。

更多信息:

于 2016-12-15T16:44:35.540 回答