Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Прочитать xml-файлы на ftp  [new]
vb_sub
Member

Откуда:
Сообщений: 894
Всем привет, мне необходимо прочитать множество xml-файлов на удаленном ftp сервере. Использую для этого
FluentFTP v. 34.0.0
public async Task ReadSalesSumAsync()
        {
            try
            {
                var credentials = new NetworkCredential("user", "pwrd", "domain");
                using FtpClient client = new FtpClient(ftpAddress,21, credentials);             
                await client.ConnectAsync();
                await client.SetWorkingDirectoryAsync("/folder");
                var fileList = await client.GetListingAsync();
				
                foreach (var item in fileList)
                {
                    if (item.Type== FtpFileSystemObjectType.File && item.Name.Substring(item.Name.Length - 3, 3).ToUpper().Equals("XML"))
                    {
                        await parseXml(item.FullName, client);
                    }
                }
                await client.DisconnectAsync();
            }
            catch (Exception ex)
            {            
                throw;
            }

            //Парсинг XML-файла
            async Task parseXml(string filePath, FtpClient client)
            {
                using (var stream = await client.OpenReadAsync(filePath))
                {
                    using (var reader= new StreamReader(stream))
                    {
                        var content =await reader.ReadToEndAsync();
                    }
                }
            }
        }

После успешного чтения 2-х файлов получаю ошибку
Failed to get the EPSV port from: 497
Причем если запускать метод ReadSalesSumAsync в режиме построчной отладки (проходить каждую строку кода через F10), то ошибка не появляется.
Код для использования брал из официального репозитория repo.
В чем может быть проблема? Спасибо
11 май 21, 14:44    [22320477]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
vb_sub
получаю ошибку
нужно угадать строку, на которой она возникает?
vb_sub
брал из официального репозитория
и куда потерял stream.Close(); ?
12 май 21, 09:30    [22320760]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
vb_sub
Member

Откуда:
Сообщений: 894
1) Ошибка возникает на строке
using (var stream = await client.OpenReadAsync(filePath))

То есть внутри FluentFtp, так что найти концы скорее всего не получится.
2)stream.Close() потерял по привычке, потому что страндартные stream из BCL обычно автоматически закрываются при Dispose и достаточно просто блока Using. Спасибо попробую прнудительно закрывать его.

Сообщение было отредактировано: 12 май 21, 10:47
12 май 21, 10:53    [22320819]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4206
vb_sub,

ну это же не гарантированно, а зависит от реализации типа
12 май 21, 10:55    [22320822]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
vb_sub
Member

Откуда:
Сообщений: 894
using (var stream = await client.OpenReadAsync(filePath))
       {
         try
         {                    
         }
         finally  
         {
            stream.Close();
         }
      }

Не помогло.
Единственное что помогает-это после using со стримом вызывать метод client.GetReply(), но где-то в мануалах писали, уже не могу найти где точно, что этот метод используйте на свой страх и риск, потому что он может попасть в бесконечный цикл.
12 май 21, 11:28    [22320853]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4206
сделай просто небольшую задержку
12 май 21, 18:05    [22321140]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
fkthat
Member

Откуда:
Сообщений: 4880
Roman Mejtes
сделай просто небольшую задержку

Хороший совет. Насколько она должна быть "небольшая", чтобы гарантированно не падать? :))
12 май 21, 20:07    [22321190]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
fkthat
Member

Откуда:
Сообщений: 4880
vb_sub
То есть внутри FluentFtp, так что найти концы скорее всего не получится.

А это зачем: https://github.com/robinrodricks/FluentFTP
12 май 21, 20:10    [22321191]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4206
fkthat,

ну допустим на сервере есть некое ограничение на количество подключений или количества загружаемых файлов, и если оно превышено, то пациент "бросает трубку".
это конечно, только в моей воспаленной фантазии, как понять это число, это вопрос. Как вариант, используй Polly, если загрузка падает, просто повторять до необходимого результата
12 май 21, 21:42    [22321223]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
fkthat
Member

Откуда:
Сообщений: 4880
Roman Mejtes
fkthat,

ну допустим на сервере есть некое ограничение на количество подключений или количества загружаемых файлов, и если оно превышено, то пациент "бросает трубку".
это конечно, только в моей воспаленной фантазии, как понять это число, это вопрос. Как вариант, используй Polly, если загрузка падает, просто повторять до необходимого результата

Polly, он-то по-моему заточен исключительно под HttpClient, т.к. внутри работает на "delegate handlers" - врят ли он в случае с FTP поможет.
12 май 21, 22:26    [22321241]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
fkthat
Member

Откуда:
Сообщений: 4880
Я бы попробовал на время сделать все на синхронном коде и проверить будет ли ошибка в этом случае.
12 май 21, 22:29    [22321245]     Ответить | Цитировать Сообщить модератору
 Re: Прочитать xml-файлы на ftp  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4206
Polly рассчитан для любых задач, хендлер можно на любое исключение сделать
12 май 21, 23:07    [22321262]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить