In C# (.NET 4.6) Ich bin ein Keep-Alive FTPS-Verbindung mit ein paar Dateien in einer Schleife wie folgt herunterladen:Die beste Methode zum Schließen einer Keep-Alive-FTP- oder FTPS-Verbindung in 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 ...
}
Nachdem die Schleife fertig ist, ich die Verbindung schließen möchten. Ich konnte keinen direkten Weg finden, dies zu erreichen. Was ich kam mit der folgenden Behelfslösung, die eine andere Low-Footprint-Anforderung an den FTP-Server, diesmal mit dem KeepAlive
Flag auf false
macht:
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();
Ich frage mich jetzt, ob es existiert eine weitere, einfacher, eleganter und direkter Weg, um eine offene FTP-Verbindung für eine bestimmte Verbindungsgruppe zu schließen.
Ich habe diese "Lösung" selbst betrachtet. Im Falle einer "Liste" oder einer ähnlichen Sammlung wäre es in Ordnung, aber für eine allgemeine "Lösung", die ein beliebiges "IEnumerable" verwendet, halte ich es für meine "Lösung" unterlegen, weil es die Anzahl der Elemente in der Aufzählung erfordern würde vorher bekannt sein. Mit anderen Worten: Wenn ich nicht die Vorteile einer faulen Auswertung für die Sammlung der Schleife verlieren möchte, muss ich bei meiner ursprünglichen "Lösung" bleiben. –