Comment déconnecter correctement à partir d'un serveur FTP avec FtpWebRequest
J'ai créé un client ftp qui se connecte plusieurs fois dans la journée pour récupérer des fichiers journaux à partir d'un serveur FTP.
Le Problème est qu'après quelques heures, je reçois un message d'erreur à partir du serveur FTP (-421 limite de session atteint..). Quand j'ai vérifier les connexions avec netstat, je peux voir à plusieurs "ÉTABLIS" des connexions sur le serveur, même si j'ai "fermé" de la connexion.
Quand j'essaie de faire de même sur la ligne de commande ou FileZilla, les connexions sont correctement fermées.
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;
Comment puis-je fermer/fermer la connexion correctement? Ai-je oublié quelque chose?
OriginalL'auteur user797717 | 2014-06-05
Vous devez vous connecter pour publier un commentaire.
Essayer de définir la FtpWebRequest.KeepAlive valeur false à la propriété. Si
KeepAlive
est définie sur false, le contrôle de la connexion au serveur sera fermé lorsque la requête est terminée.OriginalL'auteur Jamleck
Avez-vous essayé d'emballage de votre réponse à une instruction d'utilisation?
Êtes-vous sûr, MSDN semble dire qu'il fait. msdn.microsoft.com/en-us/library/...
Oui, vous avez raison. J'ai essayé d'envelopper le FtpWebRequest et pas le FtpWebResponse.
J'ai juste essayé cela, et ni l'un ni l'Close() appelle a l'effet désiré; mon serveur FTP journal montre la connexion de fermeture que lorsque mon application se termine. Jamleck réponse fonctionne bien.
OriginalL'auteur Nattrass