2016-08-09 6 views
1

C#(.NET 4.6)でキープアライブFTPまたはFTPS接続を閉じる最も良い方法は?私はこのようなループ内のファイルのカップルをダウンロードするためのキープアライブFTPS接続を使用していますC#(。NET 4.6)では

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 ... 
} 

ループが行われた後は、私は接続を閉じたいです。私はこれを達成するための直接的な方法を見つけることができませんでした。 、

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サーバへの別の低フットプリント要求を行い、この時falseに設定KeepAliveフラグがあります特定の接続グループに対して開いているFTP接続を閉じるためのよりシンプルで洗練された直接的な方法です。

答えて

0

FtpWebRequestの接続プールにはパブリックインターフェイスがありません。


しかし、簡単な解決策があるのですが、ちょうどループの最後のラウンドでfalseKeepAliveを設定します。

+0

私はこの「解決策」を自分で考えました。 'List'などのコレクションの場合は大丈夫ですが、任意の' IEnumerable'を使用する一般的な「解決法」では、列挙の項目数を必要とするため、私の「解」より劣ると考えます。あらかじめ知っておいてください。つまり、ループのコレクションの遅延評価のメリットを失いたくない場合は、私のオリジナルの「解決策」に固執する必要があります。 –

関連する問題