2016-08-09 19 views
1

在C#(.NET 4.6)我使用的是保活FTPS连接下载几个文件,在这样的循环:循环完成在C#(.NET 4.6)中关闭保持活动的FTP或FTPS连接的最佳方法?

foreach (string filename in filenames) 
{ 
    string requestUriString = GetFtpUriString(myDir) + "/" + filename; 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(requestUriString); 
    request.Method = WebRequestMethods.Ftp.DownloadFile; 
    request.Credentials = new NetworkCredential(myFtpsUsername, myFtpsPassword); 
    request.EnableSsl = true; 
    request.ConnectionGroupName = myConnectionGroupName; 
    request.KeepAlive = true; 

    ... do something ... 
} 

后,我想关闭连接。我无法找到实现这一目标的直接方法。我想出了如下变通,这让另一个低足迹请求到FTP服务器,此时用KeepAlive标志设置为false

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(GetFtpUriString(myDir)); 
request.Method = WebRequestMethods.Ftp.PrintWorkingDirectory; 
request.Credentials = new NetworkCredential(myFtpsUsername, myFtpsPassword); 
request.EnableSsl = true; 
request.ConnectionGroupName = myConnectionGroupName; 
request.KeepAlive = false; 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
response.Close(); 

我现在是否存在另一个很纳闷,更简单,更优雅和直接的方式来关闭特定连接组的开放FTP连接。

回答

0

FtpWebRequest实例的连接池没有任何公共接口。


但有一个简单的解决方案,只需设置KeepAlivefalse在上一轮循环。

+0

我自己考虑过这个“解决方案”。如果使用'List'或类似的集合,它可以,但是对于使用任意'IEnumerable'的普通“解决方案”,我认为它比我的“解决方案”差,因为它需要枚举中的项数事先知道。换句话说:如果我不想放弃循环集合的懒惰评估的好处,我需要坚持我原来的“解决方案”。 –

相关问题