服务器返回一个地址以响应PASV命令,该命令与进行FTP连接的地址不同

sen*_*ale 4 .net c# ftp ftpwebrequest system.net.webexception

System.Net.WebException:服务器返回一个地址以响应PASV命令,该命令与进行FTP连接的地址不同.
在System.Net.FtpWebRequest.CheckError()
在System.Net.FtpWebRequest.SyncRequestCallback(对象OBJ)
在System.Net.CommandStream.Abort(例外五)
在System.Net.FtpWebRequest.FinishRequestStage(RequestStage阶段)
在System.Net .FtpWebRequest.GetRequestStream()
在BackupDB.Program.FTPUploadFile(字符串SERVERPATH,字符串serverFile,FileInfo的LOCALFILE,的NetworkCredential中房)中d:\ PROJEKTI \的backupdb \的backupdb \的Program.cs:线119

码:

FTPMakeDir(new Uri(serverPath + "/"), Cred);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverPath+serverFile);
request.UsePassive = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = Cred;
byte[] buffer = new byte[10240];    // Read/write 10kb

using (FileStream sourceStream = new FileStream(
    LocalFile.ToString(), FileMode.Open))
{
    using (Stream requestStream = request.GetRequestStream())
    {
        int bytesRead;
        do
        {
            bytesRead = sourceStream.Read(buffer, 0, buffer.Length);
            requestStream.Write(buffer, 0, bytesRead);
        } while (bytesRead > 0);
    }
    response = (FtpWebResponse)request.GetResponse();
    response.Close();
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*Vee 8

我的天啊.在这里购买他们的第三方解决方案而不是通知您更改一行代码的所有内容是什么?

尝试切换Passive值以查看哪些有效:

    request.UsePassive = false;
Run Code Online (Sandbox Code Playgroud)

这可能取决于计算机(客户端和服务器)之间的防火墙.

我注意到如果我通过我们的防火墙,然后我需要它保持为True,否则它将返回异常:

远程服务器返回错误:(500)语法错误,命令无法识别.

但是,如果我在防火墙后面(就像在数据中心内直接相互连接的两台机器)那么我需要将其设置为False,否则它将返回Exception:

服务器返回一个地址以响应PASV命令,该命令与进行FTP连接的地址不同.

如果这样做并且您希望使解决方案更具适应性,则可以使用默认的True值将请求包装在try-catch块中,如果出现500错误,则将UsePassive切换为False并再次尝试.