Ich habe einen FTP-Client erstellt, der mehrmals am Tag eine Verbindung herstellt, um Protokolldateien von einem FTP-Server abzurufen.So trennen Sie den FTP-Server ordnungsgemäß mit FtpWebRequest
Das Problem ist, dass nach ein paar Stunden bekomme ich eine Fehlermeldung vom FTP-Server (-421 Sitzungslimit erreicht ..). Wenn ich die Verbindungen mit netstat überprüfe, kann ich mehrere 'HERGESTELLTE' Verbindungen zum Server sehen, obwohl ich die Verbindung "geschlossen" habe.
Wenn ich versuche, das gleiche über die Befehlszeile oder FileZilla zu tun, sind die Verbindungen ordnungsgemäß geschlossen.
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
ftpRequest.Credentials = new NetworkCredential(user, pass);
ftpRequest.UseBinary = true;
ftpRequest.UsePassive = true;
ftpRequest.KeepAlive = true;
ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
ftpStream = ftpResponse.GetResponseStream();
FileStream localFileStream = new FileStream(localFile, FileMode.Create);
int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
/* Resource Cleanup */
localFileStream.Close();
ftpStream.Close();
ftpResponse.Close();
ftpRequest = null;
Wie kann ich die Verbindung ordnungsgemäß schließen/trennen? Habe ich etwas vergessen?
AFAIK FtpWebResponse implementiert keine IDisposable-Schnittstelle. Ich werde versuchen, einen finally Block hinzuzufügen und die Streams dort zu schließen. – user797717
Sind Sie sicher, MSDN scheint es zu sagen. http://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse(v=vs.110).aspx – Nattrass
Ja, Sie haben Recht. Ich habe versucht, die FtpWebRequest und nicht die FtpWebResponse zu wickeln. – user797717