无法FTP到MainFrame位置

时间:2015-09-07 17:18:38

标签: .net mainframe ftpwebrequest

我尝试使用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'

2 个答案:

答案 0 :(得分: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);
        }
}

答案 1 :(得分:0)

FTP到大型机很复杂。 FTP可以访问两个并行文件系统,一个由z / OS数据集组成,另一个由USS文件系统组成。我的猜测是你的FTP服务器设置为显示z / OS文件系统,你需要先切换到USS文件系统,以便检索你想要的。我怀疑使用'cd'命令为get命令添加前缀会修复问题,或者指定完整路径,包括leading /,也是如此。

与您的系统程序员联系/阅读CommServer文档。