我正在通过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();
答案 0 :(得分:0)
这似乎是罪魁祸首:
System.Net信息:0:[7640] FtpControlStream#54444047-收到的响应[421 未超过传输时间。正在关闭控制连接。]
如果您不进行任何文件传输,则一段时间后您的FTP服务器将关闭连接。 “大小”请求可能不算作“转移”。
您可以做的是在服务器关闭当前连接之前强制FtpWebRequest
打开新连接。
例如,这将使.NET每分钟打开新连接:
sizeRequest.ConnectionGroupName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
另请参阅: