O servidor remoto retornou um erro: 227 Entrando no modo passivo (500 oops vs_utility_recv_peek: sem dados)

Estou tendo um problema ao conectar um serviço do Windows a um site FTP.

Eu herdei um serviço do Windows de outro desenvolvedor. O serviço se conecta a um servidor de terceiros, baixa um arquivo csv e depois o processa. Por alguma razão, o serviço parou de funcionar (há mais de um ano, antes de eu receber o projeto).

Então, voltei ao básico, criei um aplicativo de console e tentei a função de conexão / download de arquivo apenas nesse aplicativo. Eu tentei muitos métodos diferentes para conectar ao FTP, mas todos eles retornam o mesmo erro ao meu aplicativo:

O servidor remoto retornou um erro: 227 Entrando no modo passivo ()

Este é um dos muitos métodos que tentei:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftpaddress/filename.csv");
        request.Method = WebRequestMethods.Ftp.DownloadFile;

        request.Credentials = new NetworkCredential("username", "password");

        request.UsePassive = true;

        FtpWebResponse response = (FtpWebResponse)request.GetResponse();

        Stream responseStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(responseStream);
        Console.WriteLine(reader.ReadToEnd());

        Console.WriteLine("Download Complete, status {0}", response.StatusDescription);

        reader.Close();
        response.Close(); 

Mas cai nessa parte:

FtpWebResponse response = (FtpWebResponse)request.GetResponse();

Li em vários fóruns que a configuração da propriedade UsePassive como False corrige esses erros, mas tudo o que aconteceu comigo foi que eu recebi um erro de sintaxe, como abaixo:

O servidor remoto retornou um erro: (500) Erro de sintaxe, comando não reconhecido.

O arquivo está hospedado em um servidor FTP de terceiros sobre o qual não tenho controle. Posso colar o URL em um navegador e é solicitado um nome de usuário e senha, que me permitem passar e posso fazer o download do arquivo.

Para eliminar nosso firewall como a causa do problema, executei o aplicativo na rede interna e no WiFi (que não está atrás do firewall), e isso não faz diferença. Também me conectei através do FileZilla nos modos Padrão, Ativo e Passivo, e funcionou sempre. Portanto, não há problema.

Então, eu corri o Wireshark. Aqui está uma imagem da captura eletrônica usando o Filezilla (ou seja, uma bem-sucedida), no modo Passivo:

E aqui está a captura ao conectar (e falhar) usando o aplicativo, com o passivo definido como true:

Portanto, como você pode ver na conexão com falha acima, posso fazer login no servidor sem problemas. Então, por qualquer motivo, uma solicitação extra é enviada, ou seja, "TIPO I", que solicita a resposta de "Alternando para o modo binário". Abaixo disso, recebo o seguinte:

500 ops: vsf_sysutil_recv_peek: sem dados

Além disso, eu também a executei novamente depois de definir a propriedade Passive como false, e foi o que obtive naquele momento:

Então, minha pergunta é dupla;

1, se, de alguma forma, superar o problema UsePassive e definir essa propriedade como false, isso resolverá meu problema?

2, ignorando a propriedade UsePassive, por que não consigo baixar o arquivo do aplicativo, mas de qualquer outro lugar?

questionAnswers(1)

yourAnswerToTheQuestion