在使用标题中的库解决此问题时,我已经看到了几十个示例。我看到的应该工作的常见例子是:
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命令,默认为二进制类型。
答案 0 :(得分:1)
检查您是否已将FTP库配置为使用活动模式(或在防火墙和大型机中启用FTP被动模式)
答案很长: FTP协议使用两个连接,一个从客户端到服务器的命令连接,以及一个可以从客户端连接到服务器(被动模式)或服务器连接到客户端(活动模式)的数据连接。
使用错误模式将导致未配置该模式的防火墙丢弃数据连接,这将导致您遇到超时错误。
由于Windows ftp.exe仅支持活动模式,并且您未在代码中设置模式,因此我猜测大型机配置为活动模式,而您的FTP库默认为被动模式。被动模式现在非常普遍,因为主动模式不能很好地与NAT-ing路由器配合使用。
检查是否有配置设置来更改传输模式,但如果磁带库仅支持被动模式,请不要感到惊讶。
更多信息: