При загрузки файлов с Ftp выбрасывается исключение WebException 501

 
+1
 
.NET


Есть класс FtpFile с методом DownloadFile():


public class FtpFile
{
     // ФТП-запрос для загрузки файла.
     private readonly FtpWebRequest Request;
    
     public FtpFile(FtpWebRequest request)
     {
        Request = request;
     }
    
     public void DownloadFile()
     {
            byte[] buffer = new byte[1024];

            this.Request.Method = WebRequestMethods.Ftp.DownloadFile;

            // получаем полное имя загружаемого файла на локальном компьютере
            string fullFileName = Path.Combine(TargetDirectory, FtpFileName);

            using (FtpWebResponse response = (FtpWebResponse)this.Request.GetResponse())
            {
                using (Stream stream = response.GetResponseStream())
                {
                    using (FileStream fs = new FileStream(fullFileName, FileMode.OpenOrCreate))
                    {
                        int readCount = stream.Read(buffer, 0, buffer.Length);

                        while (readCount > 0)
                        {
                            fs.Write(buffer, 0, readCount);
                            readCount = stream.Read(buffer, 0, buffer.Length);
                        }
                    }
                }
            }
     }
}

Есть массив объектов этого класса. Когда я в цикле пытаюсь загрузить файлы с фтп DownloadFile()
на строке с получением запроса: using (FtpWebResponse response = (FtpWebResponse)this.Request.GetResponse())
периодически(не всегда!!!) возвращается исключение WebException с сообщением: "Удаленный сервер возвратил ошибку: (501) Синтаксическая ошибка в аргументах или параметрах." Т.е. чаще всё проходит нормально. Но в частности при подключении интернета не сразу, а уже после запуска программки(код из цикла не выполняется пока не появиться подключение) это исключение возвращается стабильно. Иногда раньше возникало, когда использовал не массив, а перечисление IEnumerable<FtpFile>. 

edited 11:02, 27.09.2013
ava 
asked 10:58, 27.09.2013
ava 

 30.09.2013 | 16:02 

Это же исключение появилось опять, но при запросе для получения информации о содержимом ftp: WebRequestMethods.Ftp.ListDirectoryDetails. Опишу вкратце, что делает программа: Сканирует ftp на наличие файлов, после этого загружает их на локальную машину. И через секунд пять делает тоже самое. И вот на сканирование ftp(запрос WebRequestMethods.Ftp.ListDirectoryDetails) возвращается опять это же исключение




Нужно всего лишь FtpWebRequest.KeepAlive выставить в false!

Answers (1)

Решилось увеличением размера буфера byte[] buffer = new byte[4096], вместо 1024. По крайне мере исключение пока больше не появлялось. Но хотелось бы, что бы кто-нибудь смог по подробней разъяснить в чем дело.)

edited 13:06, 27.09.2013
ava 
answered 11:00, 27.09.2013
ava 
Это же исключение появилось опять, но при запросе для получения информации о содержимом ftp: WebRequestMethods.Ftp.ListDirectoryDetails. Опишу вкратце, что делает программа: Сканирует ftp на наличие файлов, после этого загружает их на локальную машину. И через секунд пять делает тоже самое. И вот на сканирование ftp(запрос WebRequestMethods.Ftp.ListDirectoryDetails) возвращается опять это же исключение.
  Kolovorot | 30.09.2013, 15:26 


Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit