Мне не удалось воспроизвести проблему, на которую вы претендуете, используя ваш код (кстати, в одном из них отсутствует закрывающая скобка) с Pure-FTPd. Хотелось бы указать, что 150 - это код, который сервер генерирует, когда он принимает запрос клиента (по каналу управления) на загрузку / скачивание определенного файла и собирается инициировать соединение для передачи данных с клиентским приложением через порт, указанный в недавнем Команда ПОРТ. Это промежуточный код состояния, а не ошибка. Ошибки начинаются с 4xx или 5xx
Мартин Р поднял хорошую мысль в комментариях (теперь удаленных), что не должно быть исключений, если что-то не так уж и плохо; вам следует рассмотреть возможность приостановки вашего кода в отладчике на var response = (FtpWebResponse)ex.Response;
и использовать окно locals для полной проверки исключения, любых сообщений об ошибках, внутренних исключений и т. д.
Я рекомендую вам использовать более функциональную библиотеку FTP; FTPWebRequest невероятно прост и включает несколько операций ftp в модель запроса / ответа, которая не очень подходит
System.Net.FtpClient становится немного старше, но должен быть доступен через nuget, как и компонент WinSCP .NET Мартина Прикрыла (активно поддерживается и развивается)