Ошибка удаленного сервера: 150 Открытие подключения для передачи данных в двоичном режиме

Я пытаюсь создать небольшое консольное приложение, которое загружает файлы с ftp-сервера через явный FTP через TLS. Я уже создавал эти приложения раньше, но у меня появляется сообщение об ошибке. Я продолжаю получать эту ошибку:

Удаленный сервер возвратил ошибку: 150 Открытие соединения данных в режиме ДВОИЧНЫЙ для "filename" ‹2000 байт>.

Кажется, я не могу понять, что делать, может ли кто-нибудь мне помочь?

это мой код:

 public void DownloadFiles(string fileName)
        {
            uri.Scheme = "ftp";
            uri.Host = ftpUrl;
            uri.Port = 21;
            uri.UserName = username;
            uri.Password = password;
            uri.Path = "out";
            try
            {
                FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri.ToString() + "/" + fileName));
                reqFTP.EnableSsl = true;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(username, password);
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                FtpWebResponse response;
                response = (FtpWebResponse)reqFTP.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream writeStream = new FileStream(localFolder + fileName, FileMode.Create);

                long length = response.ContentLength;
                int bufferSize = 2048;
                Byte[] buffer = new Byte[bufferSize];
                int readCount = responseStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    writeStream.Write(buffer, 0, readCount);
                    readCount = responseStream.Read(buffer, 0, bufferSize);
                }
                AppendLogFile(response, "Downloading Files: ", fileName);
                writeStream.Close();
                responseStream.Close();
                response.Close();
                reqFTP.Abort();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in DownloadFileByFileName method!! " + ex.Message);
            }
        }

Благодарность!


person Lahib    schedule 04.03.2014    source источник
comment
В какой строке выбрасывается исключение? Ответ 150 абсолютно нормален для FTP - он указывает, что сервер пытается подключиться к вашему клиенту для канала данных.   -  person Mike Dimmick    schedule 04.03.2014
comment
@MikeDimmick бросается в эту строку response = (FtpWebResponse)reqFTP.GetResponse();   -  person Lahib    schedule 05.03.2014


Ответы (2)


Я не мог найти решение для этого, поэтому я решил использовать Chillkat для этого приложения. работает отлично. Но нужно было купить лицензию на год.

это мой код:

public void Connect(string fileName)
{
    bool success;
    success = ftp.UnlockComponent("license");
    if (!success)
    {
        Console.WriteLine(ftp.LastErrorText);
        return;
    }

    ftp.IdleTimeoutMs = 10000;
    ftp.AuthTls = true;
    ftp.Ssl = false;
    ftp.Hostname = ftpUrl;
    ftp.Port = 21;
    ftp.Username = username;
    ftp.Password = password;
    ftp.KeepSessionLog = true;

    success = ftp.Connect();
    if (success != true)
    {
        Console.WriteLine(ftp.LastErrorText);
        return;
    }

    ftp.ClearControlChannel();
    bool sucess = ftp.GetFile("out/" + fileName, localFolder + fileName);
    if (!success)
    {
        Console.WriteLine(ftp.LastErrorText);
        AppendErrorLogFile("Error in downloading file", "Download file method", fileName);
        return;
    }
    else
    {
        AppendLogFile("Download Success", "Download File Method", fileName);
        ftp.DeleteRemoteFile("out/" + fileName);
    }
}
person Lahib    schedule 07.03.2014

long length = response.ContentLength;

Я считаю, что здесь виноват, если вы используете это для загрузки файла, который уже существует, ваш запрос закроется, прежде чем вы получите ответ от сервера и выдадите ошибку 150.

person A.J    schedule 23.12.2015