Чтобы получить размер файла для каждого файла в списке файлов, я использую следующий код:
foreach (String f in files)
{
UriBuilder ftpUri = new UriBuilder("ftp", ftpServer, -1, ftpPfadZuLogDateien + "/" + f);
FtpWebRequest ftpclientRequest1 = (FtpWebRequest)WebRequest.Create(ftpUri.Uri);
ftpclientRequest1.Method = WebRequestMethods.Ftp.GetFileSize;
ftpclientRequest1.Credentials = new NetworkCredential(ftpLoginName, ftpPassword);
FtpWebResponse response1 = (FtpWebResponse)ftpclientRequest1.GetResponse();
long filesize = response1.ContentLength;
response1.Close();
// store the file size somewhere
}
Если в списке всего несколько файлов, это обычно работает. Но после некоторых из этих запросов (иногда 10, иногда 100) подряд GetResponse () выдаст ошибку 503 (неверная последовательность команд).
Что эта ошибка пытается сказать мне? Я опрашиваю слишком быстро? Забыть убрать любой ресурс?
И что я могу с этим поделать?
дополнительная информация:
Установка KeepAlive = false для соединения приводит к сбою во втором запросе с ошибкой 550 (файл не найден / доступ запрещен?).
Установка UsePassive = false ничего не изменила.
Установка UseBinary = true ничего не изменила.
Удар головой по клавиатуре ничего не изменил.
[Update] beckr.org предоставил ответ - так как он скрыт за ссылкой и большим количеством текста, здесь короткая версия: я изменил источник, поэтому я бы использовал NetworkCredentials:
NetworkCredential myCredentials = new NetworkCredential(ftpLoginName, ftpPassword);
foreach (String f in files)
{
UriBuilder ftpUri = new UriBuilder("ftp", ftpServer, -1, ftpPfadZuLogDateien + "/" + f);
FtpWebRequest ftpclientRequest1 = (FtpWebRequest)WebRequest.Create(ftpUri.Uri);
ftpclientRequest1.Method = WebRequestMethods.Ftp.GetFileSize;
ftpclientRequest1.Credentials = myCredentials;
FtpWebResponse response1 = (FtpWebResponse)ftpclientRequest1.GetResponse();
long filesize = response1.ContentLength;
response1.Close();
// store the file size somewhere
}
Таким образом, все работает так, как должно.