Что вызывает тайм-аут в GetResponse()

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

Код ответа:

Неопределенный

Статус ответаОписание:

Трассировки стека:

в Syste.NetFtpWebRequest.GetResponse() в ConsoleApplication1.Program.Main(String[] args) в c:\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line27

0 ответов

Другие вопросы по тегам