Почему бы вам просто не обработать исключение в блоке захвата ?:: -).Код ниже будет правильно определять, работает ли FTP или нет.Он опирается на метод веб-запроса «ListDirectoryDetails», который должен быть быстрым и не требовать большой полосы пропускания (обычно :: - D, то есть, если вы не опрашиваете FTP по 15k файлов).
Переменные:_URL, _User, _Pass, _PassiveMode (вы можете попробовать проверить оба режима).
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(_URL);
FtpWebResponse res;
StreamReader reader;
ftp.Credentials = new NetworkCredential(_User, _Pass);
ftp.KeepAlive = false;
ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
ftp.UsePassive = _PassiveMode;
try
{
using (res = (FtpWebResponse)ftp.GetResponse())
{
reader = new StreamReader(res.GetResponseStream());
}
}
catch
{
//Handling code here.
}
Я забыл, что именно является ошибкой для "мертвого" FTP, но не сложно просто поставить точку останова вчто поймать, посмотреть, что такое исключение и обработать его :: -).
Просто добавьте все это в функцию с 4 параметрами или, возможно, с 3, и вы попробуете как пассивный, так и активный изнутри.Функция будет возвращать логическое значение, независимо от того, работает ли FTP.Когда вы запрашиваете список файлов, вы тратите немного времени, но это необходимо, только если вы слишком тщательны.Вы можете удалить «читателя», а также поток ответов, который я думаю :: -).
Надеюсь, это поможет :: -).