Я разработал веб-сервис в C#. Net 4.5, который подключается к ftp-серверу (с SSL) и перечисляет все файлы, хранящиеся в каталоге на ftp-сервере. Код работал хорошо в прошлом году (начало 2019 года или конец 2018 года), но так как я снова тестировал код 3 недели go, и он больше не работает. Я пробовал много вещей:
-Я изменил целевой фреймворк с 4.5 на 4.8 ( Ссылка на статью )
-Использую пакет nuget fluentFTP (но я имеют ту же ошибку
Дело в том, что я могу подключиться к ftp-серверу с помощью Filezilla и получить доступ к каталогу без каких-либо ошибок (поэтому я предполагаю, что это не проблема брандмауэра) Я проверил журналы ftp обмен между моим компьютером и сервером ftp, и ошибка происходит во время команды ftp MLSD -> Открытие канала данных для списка каталога "каталог" (последнее сообщение от сервера ->. Net ошибка: "аутентификация не удалась, потому что удаленная сторона закрыл транспортный поток "
Вот код:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://urlFtpServer:21/directory");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.EnableSsl = true;
// Sets the user login and password.
request.Credentials = new NetworkCredential("login", "password");
request.KeepAlive = true;
try
{
// Send the request.
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
IEnumerable<string> lstDirectoryFiles = reader.ReadToEnd()
.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
// Use the user criteria to get only the file needed.
if (string.IsNullOrEmpty(in_searchPattern))
return lstDirectoryFiles.ToList();
Regex rgx = new Regex(in_searchPattern);
return lstDirectoryFiles.Where(st => rgx.IsMatch(st)).ToList();
}
}
}
}
catch (Exception ex)
{
//Here is the exception: authentication failed because the remote party has closed the transport stream
}
Пожалуйста, помогите:)
Я забыл упомянуть, что метод запроса ftp WebRequestMethods.Ftp.MakeDirectory отлично работает