FTP 서버에서 로그 파일을 검색하기 위해 하루 중 여러 번 연결하는 ftp 클라이언트를 만들었습니다.FtpWebRequest를 사용하여 FTP 서버에서 올바르게 연결을 끊는 방법
문제는 몇 시간 후 FTP 서버에서 오류 메시지가 표시됩니다 (세션 제한에 도달했습니다 ~ ..). netstat을 사용하여 연결을 확인할 때 연결을 "닫은"경우에도 서버에 대한 여러 개의 '연결'연결을 볼 수 있습니다.
명령 줄이나 FileZilla에서 동일한 작업을 시도하면 연결이 제대로 닫힙니다.
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;
제대로 연결을 끊을 수 있습니까? 나는 아무것도 잊었 니?
AFAIK FtpWebResponse는 IDisposable 인터페이스를 구현하지 않습니다. finally 블록을 추가하고 스트림을 닫습니다. – user797717
정말입니까? MSDN은 그렇다고합니다. http://msdn.microsoft.com/en-us/library/system.net.ftpwebresponse(v=vs.110).aspx – Nattrass
네, 맞습니다. FtpWebResponse가 아니라 FtpWebRequest를 래핑하려고했습니다. – user797717