无法 FTP 到大型机位置
Posted
技术标签:
【中文标题】无法 FTP 到大型机位置【英文标题】:Unable to FTP to MainFrame Location 【发布时间】:2015-09-07 17:18:37 【问题描述】:我尝试使用 FtpWebRequest 从大型机位置检索文件。
其他通用服务器一切正常,仅在大型机上出现问题 这是消息
550 Command RETR fails: /'XXX.XXX.XXX.XX.TXT' does not exist.\r\n
我相信我正在创建它的 URI,因此您可以在该消息中看到一个“/”。
这是我的URI = ftp ://data.data.com//'XXX.XXX.XXX.XX.TXT'
【问题讨论】:
这个错误是由您编写的软件程序引起的吗?如果是这样,您能否发布导致问题的相关代码? 【参考方案1】:FtpWebRequest 类已从 .Net 2.0/3.5 更改为 .Net Framework 4,这与 CWD 协议命令有关。这会阻止在我们实际请求的命令之前使用 CWD 命令。所以我强迫 FTPWebRequest 类表现得像.net 2.0。 这是强制 FtpWebRequest 表现得像 .net 2.0/3.5 的解决方案 https://support.microsoft.com/en-us/kb/2134299
private static void SetMethodRequiresCWD()
Type requestType = typeof(FtpWebRequest);
FieldInfo methodInfoField = requestType.GetField("m_MethodInfo", BindingFlags.NonPublic | BindingFlags.Instance);
Type methodInfoType = methodInfoField.FieldType;
FieldInfo knownMethodsField = methodInfoType.GetField("KnownMethodInfo", BindingFlags.Static | BindingFlags.NonPublic);
Array knownMethodsArray = (Array)knownMethodsField.GetValue(null);
FieldInfo flagsField = methodInfoType.GetField("Flags", BindingFlags.NonPublic | BindingFlags.Instance);
int MustChangeWorkingDirectoryToPath = 0x100;
foreach (object knownMethod in knownMethodsArray)
int flags = (int)flagsField.GetValue(knownMethod);
flags |= MustChangeWorkingDirectoryToPath;
flagsField.SetValue(knownMethod, flags);
【讨论】:
希望您已经浏览了共享链接。你可以很容易地找出它不工作的原因。他们提出了一种解决方法。此错误不适用于 RFC 投诉服务器。但我不明白什么是 RFC 投诉。 :(【参考方案2】:FTP到主机很复杂。 FTP 可以访问两个并行文件系统,一个由 z/OS 数据集组成,另一个由 USS 文件系统组成。我的猜测是您的 FTP 服务器设置为向您显示 z/OS 文件系统,您需要首先切换到 USS 文件系统才能检索您想要的内容。我怀疑在 get 命令前面加上“cd”命令会解决问题,或者指定完整路径(包括前导 /)也可以。
与您的系统程序员交谈/阅读 CommServer 文档。
【讨论】:
我尝试使用 /,但没有运气,我无法使用 CD,因为我试图通过使用 FTPWebRequest 类的程序来执行此操作。相同的代码适用于 .net 2.0,但不适用于 4.0。 在几篇文章中我发现 FtpWebRequest 类已从 .Net 2.0/3.5 更改为 .Net Framework 4,这与 CWD 协议命令有关。这会阻止之前使用 CWD 命令我们实际请求的命令。所以我强迫 FTPWebRequest 类表现得像.net 2.0。现在它工作正常。谢谢大家的宝贵建议..以上是关于无法 FTP 到大型机位置的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 python 脚本将 FTP 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符