Подтвердить что ты не робот

"Основное соединение было закрыто" при загрузке файла с ftp-сервера

Я хочу загрузить файл с ftp-сервера. Я написал следующий код для загрузки файла из ftp

public void downloadFile(string FTPAddress, string filename, string username, string password, string destFile)
{
    try
    {
        FtpWebRequest request = FtpWebRequest.Create(FTPAddress + filename) as FtpWebRequest;
        request.Method = WebRequestMethods.Ftp.DownloadFile;
        request.Credentials = new NetworkCredential(username, password);
        request.UsePassive = true;
        request.UseBinary = true;
        request.UseBinary = true;
        request.KeepAlive = false; //close the connection when done
        request.Timeout = 60000;
        //Streams
        using (var response = request.GetResponse())
        {

            using (Stream reader = response.GetResponseStream())
            {
                byte[] buffer = new byte[1024];
                using (Stream streamFile = File.Create(destFile))
                {
                    while (true)
                    {
                        int bytesRead = reader.Read(buffer, 0, buffer.Length);
                        if (bytesRead == 0)
                        {
                            break;
                        }
                        else
                        {
                            streamFile.Write(buffer, 0, bytesRead);

                        }
                    }
                }
            }
        }
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);             
    }
}     

Но при запуске этого кода дается исключение:

Подключенное соединение было закрыто: произошла непредвиденная ошибка a получать.

Что может быть проблемой, помогите мне...

4b9b3361

Ответ 1

Предложение 1: EXPLICITLY установите тайм-аут на бесконечность.

request.Timeout = -1;

Предложение 2: вывести более специфичный тип исключения WebException и изучить WebExceptionStatus.

Предложение 3: Включить трассировку для System.Net.

Я установил TraceLevel для двух источников, которые не применимы в вашей ситуации.

Как настроить трассировку сети

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="includehex" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Cache">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Http">
        <listeners>
          <add name="System.Net "/>
        </listeners>
      </source>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.WebSockets">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
      <add name="System.Net.Cache" value="Off"/>
      <add name="System.Net.Http" value="Off"/>
      <add name="System.Net.Sockets" value="Verbose"/>
      <add name="System.Net.WebSockets" value="Off"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
</configuration>