无法 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 到大型机位置的主要内容,如果未能解决你的问题,请参考以下文章

带有命令的 FTP 到大型机数据集

尝试使用 python 脚本将 FTP 文件传输到大型机服务器,但在大型机数据集结束时获取特殊字符

通过 ftp 连接 Z/OS 大型机 SDSF。如何获得RC?

使用 FTP 形式 Python 访问大型机数据集

从 VB.net 上传文件到大型机

使用 FTP 和 C# 启动现有大型机作业