Удаленный сервер возвратил ошибку: (425) Не удается открыть соединение для передачи данных. Это происходит в C # программе на сервере - PullRequest
0 голосов
/ 30 октября 2019

Вот функция, которую я написал для загрузки файла с FTP-сервера. Это работает, когда я вызываю это на настольном приложении или консольном приложении. Но происходит сбой и выдает сообщение об ошибке, когда это происходит в Windows Service или при вызове консольного приложения из планировщика Windows. Мне нужно получать выбранные файлы ежедневно. Я пытаюсь автоматизировать вместо того, чтобы работать вручную каждый день утром.

private void GetFile(string url, string user, string pwd, string folder, string filename
                        , string destloc, string destfile)
{
        try
        {
            string RemoteFtpPath = url + folder + "/" + filename;
            String DestLoc = destloc + destfile;

            String Username = user; 
            String Password = pwd;  
            Boolean UseBinary = false; // use true for .zip file or false for a text file
            Boolean UsePassive = false;

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(RemoteFtpPath);
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            request.KeepAlive = true;
            request.UsePassive = UsePassive;
            request.UseBinary = UseBinary;

            request.Credentials = new NetworkCredential(Username, Password);
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream);

            if (File.Exists(DestLoc))
                File.Delete(DestLoc);
            using (FileStream writer = new FileStream(DestLoc, FileMode.Create))
            {
                long length = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[2048];
                readCount = responseStream.Read(buffer, 0, bufferSize);
                while (readCount > 0)
                {
                    writer.Write(buffer, 0, readCount);
                    readCount = responseStream.Read(buffer, 0, bufferSize);
                }
            }
            reader.Close();
            response.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

1 Ответ

0 голосов
/ 31 октября 2019

Путем изменения свойств решена проблема.

request.KeepAlive = false;
request.UsePassive = true;
request.UseBinary = false; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...