Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья поможет устранить проблему, из-за которой функция Windows Internet (WinINet) FtpPutFile
по-прежнему возвращает значение TRUE , даже если операция завершается сбоем с состоянием 451.
Исходная версия продукта: Internet Explorer 10, 9
Исходный номер базы знаний: 2790777
Симптомы
API Wininet.dll FtpPutFile
возвращает значение TRUE, даже если операция завершается сбоем со следующим состоянием:
451 — запрошенное действие прервано: локальная ошибка при обработке.
Последовательность событий, ведущих к этому результату, аналогична следующей:
FTP:Response to Port 28376, "230 Login успешно".
FTP:Response to Port 28376, "200 Переключение на режим ASCII".
FTP:Request from Port 28376, PaSV
FTP:Response to Port 28376, '227 Ввод пассивного режима (192,168 0 99 213 154)."
FTP:Request from Port 28376,'STOR myTesting.txt'
FTP:Response to Port 28376, "150 OK для отправки данных".
(Теперь данные отправляются в 192 168 0 99 с портом 256x213+154 = 54682)
FTP:Response to Port 28376, "451 Сбой записи в локальный файл".
Причина
Функция WinINet (включая оба FtpPutFileA
и) сообщает код состояния как TRUE, несмотря на то, что внутренняя реализация FtpPutFile
функции WinINet FtpPutFile
уже захватила сообщение об ошибке 451 записи в локальный ответ на ошибку файла с FtpPutFileW
сервера.
Обходное решение
Чтобы обойти эту проблему, проверьте код FtpPutFile
состояния возврата вместо того, чтобы полагаться на API, возвращающий false. Для этого можно использовать функцию InternetGetLastResponseInfo()
для проверки сервера-ответа.
Примечание.
Протокол FTP может возвращать дополнительные текстовые сведения вместе с большинством ошибок. Эти расширенные сведения об ошибке InternetGetLastResponseInfo
можно получить с помощью функции.