我尝试使用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'
答案 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文档。