На веб-сервере Windows Server 2008 R2 у меня есть служба Windows, которая загружает файлы на внешний FTP-сервер. Собственно несколько серверов (Google, Bing и т. Д.). Это приложение .NET, которое использует встроенные библиотеки FTP .NET.
Я получаю смесь следующих ошибок:
The operation has timed out.
The remote server returned an error: (425) Can't open data connection.
Брандмауэр Windows (домен, частный, общедоступный) настроен на разрешение исходящих подключений.
FTP не поддерживает брандмауэр. Он предшествовал эпохе Интернета, когда брандмауэры были обычным явлением, поэтому предполагается, что для обеих сторон разговора совершенно нормально открывать порты друг с другом. Командный канал, который вы открываете при подключении к FTP-серверу, представляет собой инициируемое вами соединение между вами и сервером. Канал DATA, который вы используете для загрузки, - это инициированное соединение через FTP-сервер тебе. Что еще хуже, порт, который ваш FTP выбирает для представления, является произвольным высоким портом, поэтому настроить брандмауэр, чтобы разрешить правильные порты, сложно.
Поэтому в протоколе FTP был создан «пассивный» режим. Это глагол PASV. Это указывает FTP-серверу изменить направление инициирования канала DATA; он дает клиенту высокий порт для подключения, клиент инициирует соединение, а сервер передает данные по этому соединению. Намного проще брандмауэра.
Для библиотек .NET вам, вероятно, повезет больше, установив UsePassive свойство True.