私の Web アプリケーションでは、2 つの FTP フォルダーへのパスを設定する必要があり、モデルの検証では、これらのフォルダーが FTP サーバーに存在するかどうかを確認しようとします。私の問題は、これが通常最初に機能し、2回目も通常機能することです。しかし、3 回目には「リモート サーバーがエラーを返しました: (530) ログインしていません」というエラーが表示されました。
これが私のコードです:
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(model.configData.FTPInputFolder));
request.Credentials = new NetworkCredential("ftp_free", "ftp_free");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
/*response.Close();*/
}
catch (WebException e)
{
ModelState.AddModelError("configData.FTPInputFolder", "Directory does not exist " + e.Message);
}
// second request for one other directory
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(model.configData.FTPOutputFolder));
request.Credentials = new NetworkCredential("ftp_free", "ftp_free");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
}
catch (WebException e)
{
ModelState.AddModelError("configData.FTPOutputFolder", "Directory does not exist" + e.Message);
}
しばらくするとすべてが正常になりますが、2 ~ 3 回の検証 (このコードを実行) の後、「ログインしていない問題」が再発します。私は何を逃したのですか?
さらに、コメントを外しresponse.Close();
てファイルがフォルダーに存在する場合 (内部に約 25 mb のファイルがある場合)、まったくハングする可能性があります。ここで何が問題なのですか?
**Edit1: ** PrintWorkDirectory
代わりに使用するListDirectory
と、チェックしたディレクトリに関係なく例外がスローされません。写真は、サーバーに存在しないディレクトリの応答オブジェクトです
そして、ここに既存のフォルダーの応答オブジェクトがあります。全く同じだ…