Что вызывает тайм-аут в GetResponse () - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь получить доступ к 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

...