FTP-Connection lässt sich nicht schließen

Asterix-Ac

Erfahrenes Mitglied
Hallo zusammen,

bin dabei eine FTP-Connection zu basteln und dabei ist mir aufgefallen, dass die Connection die dann aufgebaut ist, nur geschlossen werden kann, wenn man die Anwendung schließt.
Ich habe folgende vorläufige statische Methode, um ein DateiListing zu laden:
Code:
public static string[] GetFileList(string ftpServerIP, string ftpUserID, string ftpPassword, string ftpPath)
    {
        string[] downloadFiles;
        StringBuilder result = new StringBuilder();
        FtpWebRequest reqFTP;
        StreamReader reader;
        WebResponse response;
        try
        {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + ftpPath));
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            response = reqFTP.GetResponse();
            reader = new StreamReader(response.GetResponseStream());
            //MessageBox.Show(reader.ReadToEnd());
            string line = reader.ReadLine();
            while (line != null)
            {
                result.Append(line);
                result.Append("\n");
                line = reader.ReadLine();
            }
            result.Remove(result.ToString().LastIndexOf('\n'), 1);
            if(reader != null)
        		reader.Close();
        	if(response != null)
        		response.Close();
        	if(reqFTP != null)
        		reqFTP.Abort();
            //MessageBox.Show(response.StatusDescription);
            return result.ToString().Split('\n');
        }
        catch (Exception)
        {
            downloadFiles = null;
            return downloadFiles;
        }	        
	    }
In meinem Gui-Projekt rufe ich von meinem Hauptfenster aus ein Dialog auf, in dem das DateiListing zu sehen ist. Doch wenn ich das DialogFenster schließe, bleibt die Connection bestehen. Erst, wenn ich die komplette Anwendung schließe, wird auch die Connection beendet.

Wie kann ich dieConnection beenden, wenn ich den Dialog schließe?

Asterix
 

Asterix-Ac

Erfahrenes Mitglied
Hallo Norbert,

danke für Deine Antwort.
Wie Du erkennen kannst, habe ich auch folgende Zeilen drin :
Code:
if(response != null)
     response.Close();
Doch weder damit, noch ohne if-Abfrage, schließt sich der Stream.

Ich habe es auch schon mit einem Destruktor in dem Dialog versucht und mit GC.Collect in der Hauptform, aber selbst dass ist gescheitert.

Vielleicht mache ich ja was grundlegendes falsch?

Asterix
 

ikays

Grünschnabel
Hallo AsterixAoH,

versuchen Sie es mal mit

Code:
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + ftpPath));
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;

Gruß ikays.