WinINet FtpPutFile devuelve el éxito cuando se devuelve el estado 451

Este artículo le ayuda a resolver el problema en el que la función Windows Internet (WinINet) aún devuelve TRUE incluso cuando la operación falla con el FtpPutFile estado 451.

Versión del producto original:   Internet Explorer 10, 9
Número KB original:   2790777

Síntomas

La APIWininet.dll devuelve TRUE incluso cuando se produce un error en la operación con el siguiente FtpPutFile estado:

451: acción solicitada anulada: error local en el procesamiento.

La secuencia de eventos previos a este resultado es similar a la siguiente:

FTP:Response to Port 28376, '230 Login successful.'
FTP:Response to Port 28376, '200 Switching to ASCII mode.'
FTP:Request from Port 28376, 'PASV'
FTP:Response to Port 28376, '227 Entering Passive Mode (192,168,0,99,213,154).'
FTP:Request from Port 28376,'STOR myTesting.txt'
FTP:Response to Port 28376, '150 Ok to send data.'
(Ahora los datos se envían a 192.168,0,99 con puerto 256x213+154 = 54682)
FTP:Response to Port 28376, '451 Failure writing to local file.'

Causa

La función WinINet (incluidas las dos y ) notifica el código de estado como TRUE aunque la implementación interna de winINet de la función ya capturó la respuesta de FtpPutFile FtpPutFileA error FtpPutFileW FtpPutFile 451 Failure writing to local file desde el servidor.

Solución alternativa

Para evitar este problema, compruebe el código de estado de devolución en lugar de confiar en que la FtpPutFile API devuelva False. Para ello, puede usar la InternetGetLastResponseInfo() función para comprobar la respuesta del servidor.

Nota

El protocolo FTP puede devolver información de texto adicional junto con la mayoría de los errores. Esta información de error extendida se puede recuperar mediante la InternetGetLastResponseInfo función.