FTP creationTimout ошибка при передаче больших файлов по FTP - PullRequest
0 голосов
/ 29 июня 2018

Я передаю обновленную программу клиенту через FTP-сервер. Общий размер папки составляет 250 МБ, я столкнулся с этой проблемой.

"System.Net.WebException: системная ошибка. ---> System.Net.InternalException: системная ошибка. в System.Net.PooledStream.PrePush (объект Ожидаемый объект) в System.Net.ConnectionPool.PutConnection (PooledStream pooledStream, Объект owningObject, Int32 creationTimeout, Boolean canReuse) в System.Net.FtpWebRequest.FinishRequest stage. FtpWebRequest.SyncRequestCallback (Object obj) в System.Net.FtpWebRequest.RequestCallback (Object obj) в System.Net.CommandStream.Dispose (логическое удаление) в System.IO.Stream.Close () \ r \ n в System.IO.Stream.Dispose () в System .Net.ConnectionPool.Destroy (PooledStream pooledStream) в System.Net.ConnectionPool.PutConnection (PooledStream pooledStream, объект owningObject, Int32 creationTimeout, Boolean canReuse) в System.Net.FtpWebRequest.AttemptedRetp. SubmitRequest (логическая асинхронность) --- Конец внутренней трассировки стека исключений --- в System.Net.FtpWebRequest.GetResponse () в WMSUpdateManager.FTPManagerClass.getFileSizeOfDir (имя файла строки) в C: \ Users \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs: строка 472 в WMSUpdateManager.FTPManagerClass.getFileSize (имя файла строки) в C: \ Users \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs: строка 439 в WMSUpdateManager.FTPManagerCile \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs: строка 118 "

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

FtpWebRequest sizeRequest;

sizeRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + filename);
sizeRequest.Credentials = new NetworkCredential(username, password);
sizeRequest.UsePassive = true;
sizeRequest.KeepAlive = true;
sizeRequest.Method = WebRequestMethods.Ftp.GetFileSize;
sizeRequest.UseBinary = true;
sizeRequest.EnableSsl = false;
sizeRequest.Timeout = -1;
FtpWebResponse respSize = (FtpWebResponse)sizeRequest.GetResponse();   //problem at line 472 
size = respSize.ContentLength;
sizeRequest = null;
respSize.Close();

Мой файл журнала .

1 Ответ

0 голосов
/ 30 июня 2018

Это похоже на виновника:

Информация System.Net: 0: [7640] FtpControlStream # 54444047 - Получен ответ [421 Превышено время без передачи. Закрытие управляющего соединения. ]

Ваш FTP-сервер закрывает ваше соединение через некоторое время, если вы не выполняете передачу файлов. «Размер» запросов, скорее всего, не считается «передачей».


Что вы можете сделать, это заставить FtpWebRequest открыть новое соединение, прежде чем сервер закроет текущее.

Например, это заставит .NET открывать новое соединение каждую минуту:

sizeRequest.ConnectionGroupName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");

Смотри также:

...