Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł pomaga rozwiązać problem polegający na tym, że funkcja Windows Internet (WinINet) FtpPutFile
nadal zwraca wartość TRUE nawet wtedy, gdy operacja kończy się niepowodzeniem ze stanem 451.
Oryginalna wersja produktu: Internet Explorer 10, 9
Oryginalny numer KB: 2790777
Symptomy
Interfejs API Wininet.dll FtpPutFile
zwraca wartość TRUE , nawet jeśli operacja kończy się niepowodzeniem z następującym stanem:
451 — Żądana akcja została przerwana: błąd lokalny w przetwarzaniu.
Sekwencja zdarzeń prowadzących do tego wyniku jest podobna do następującej:
FTP:Odpowiedź na port 28376, "230 Logowanie powiodło się".
FTP:Response to Port 28376, "200 Przełączanie do trybu ASCII".
FTP:Żądanie z portu 28376, "PASV"
FTP:Response to Port 28376, '227 Entering Passive Mode (192,168,0,99,213,154)."
FTP:Żądanie z portu 28376,'STOR myTesting.txt'
FTP:Response to Port 28376, '150 Ok to send data'.
(Teraz dane są wysyłane do 192 168 0 99 z portem 256x213+154 = 54682)
FTP:Response to Port 28376, "451 Failure write to local file".
Przyczyna
Funkcja WinINet FtpPutFile
(w tym zarówno FtpPutFileA
i FtpPutFileW
) zgłasza kod stanu jako TRUE , mimo że wewnętrzna implementacja FtpPutFile
funkcji WinINet już przechwyciła błąd 451 zapisywania w lokalnym pliku odpowiedzi błędu z serwera.
Rozwiązanie
Aby obejść ten problem, sprawdź kod FtpPutFile
stanu powrotu zamiast polegać na interfejsie API zwracającym wartość False. Aby to osiągnąć, możesz użyć InternetGetLastResponseInfo()
funkcji , aby sprawdzić serwer-odpowiedź.
Uwaga 16.
Protokół FTP może zwracać dodatkowe informacje tekstowe wraz z większością błędów. Te rozszerzone informacje o błędzie można pobrać przy użyciu InternetGetLastResponseInfo
funkcji .