Я пытаюсь получить доступ к FTP-серверу через консольное приложение, написанное на c #.У моего приложения есть тайм-аут на FtpWebRequest.GetResponse()
- первая строка внутри try / catch.
Я могу получить доступ к FTP-серверу через Filezilla с учетными данными и предоставленным мне портом uri +.
- Я дважды проверил свои учетные данные с сетевым администратором.
- Я попытался запустить свой код с указанием порта в URI и без него.
- У меня естьпопытался отрегулировать значение
FtpWebRequest.Timeout
. - Я пытался использовать
FtpWebRequest.ListDirectory
, FtpWebRequest.ListDirectoryDetails
и FtpWebRequest.DownloadFile
. Я пробовал с FtpWebRequest.UsePassive = false
и без него.
class Program
{
static void Main(string[] args)
{
//Uri uri = new Uri(@"ftp://1.2.3.4:990/directory/file.csv");
Uri uri = new Uri(@"ftp://1.2.3.4:990/directory");
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri);
ftpRequest.Credentials = new NetworkCredential("username", "password");
//ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
//ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
//ftpRequest.UsePassive = false;
ftpRequest.Timeout = Convert.ToInt32(0.5d * 60 * 1000);
try
{
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
List<string> directories = new List<string>();
string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
directories.Add(line);
line = streamReader.ReadLine();
}
}
catch (WebException we)
{
Console.WriteLine("Message:\r\n\t{0}\r\n", we.Message);
Console.WriteLine("Response:\r\n\t{0}\r\n", we.Response);
Console.WriteLine("Response code:\r\n\t{0}\r\n", ((FtpWebResponse)we.Response).StatusCode);
Console.WriteLine("Response StatusDescription:\r\n\t{0}\r\n", ((FtpWebResponse)we.Response).StatusDescription);
Console.WriteLine("Stacktrace:\r\n\t{0}\r\n", we.StackTrace);
}
catch (Exception e) { Console.WriteLine("Exception.ToString:\r\n\t{0}", e.ToString()); }
finally { Console.ReadLine(); }
}
}
Каждый раз, когда я запускаю этот код, я получаю следующий вывод.
Сообщение:
Операцияистекло время ожидания.
Ответ:
System.Net.FtpWebResponse
Код ответа:
Не определено
Описание статуса ответа:
Stacktrace:
в Syste.NetFtpWebRequest.GetResponse () в ConsoleApplication1.Program.Main (String [] args) в c: \ Visual Studio 2013 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs: line27