FTP创建通过FTP传输大文件时出现Timout错误

时间:2018-06-29 14:59:26

标签: c# .net ftp ftpwebrequest

我正在通过FTP服务器将更新的程序传输到客户端。该文件夹的总大小为250 MB,我正面临这个问题。

  

“ System.Net.WebException:系统错误。---> System.Net.InternalException:系统错误。   在System.Net的System.Net.FtpWebRequest.FinishRequestStage(RequestStage阶段)的System.Net.ConnectionPool.PutConnection(PooledStream pooledStream,Object owneringObject,Int32 creationTimeout,布尔值canReuse)处的System.Net.PooledStream.PrePush(Object ExpectedOwner)处。 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.PutConnection(System.Net.FtpWebRequest.AttemptedRecovery(Exception e)上的.Net.ConnectionPool.Destroy(PooledStream pooledStream)在System.Net.FtpWebRequest上。 SubmitRequest(布尔异步)     ---内部异常堆栈跟踪的结尾---     在System.Net.FtpWebRequest.GetResponse()     在WMSUpdateManager.FTPManagerClass.getFileSizeOfDir(String filename)在C:\ Users \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs:line 472     在C:\ Users \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs:第439行的WMSUpdateManager.FTPManagerClass.getFileSize(String filename)在C:\ Users的WMSUpdateManager.FTPManagerClass.DownloadFileSet(String remoteFile,String localFile) \ USER \ source \ repos \ WMSUpdateManager \ WMSUpdateManager \ FTPManagerClass.cs:line 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();

My log file

1 个答案:

答案 0 :(得分:0)

这似乎是罪魁祸首:

  

System.Net信息:0:[7640] FtpControlStream#54444047-收到的响应[421 未超过传输时间。正在关闭控制连接。]

如果您不进行任何文件传输,则一段时间后您的FTP服务器将关闭连接。 “大小”请求可能不算作“转移”。


您可以做的是在服务器关闭当前连接之前强制FtpWebRequest打开新连接。

例如,这将使.NET每分钟打开新连接:

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

另请参阅: