Я использую WinHttpSendRequest/WinHttpWriteData для загрузки большого (54 МБ) файла на наш сервер, отправив его в куски 4 КБ, чтобы дать пользователям обратную связь. Насколько я знаю, это работает до недавнего времени. Теперь, когда я пытаюсь это сделать, загрузка идет очень быстро, а затем время ожидания WinHttpReceiveResponse() и неполные данные принимаются сервером.WinHttpWriteData, похоже, «затопляет» сервер
Я использую Win 8.1 64bit, IE11 11.0.15 (я думаю что WinHttp обновляется с IE), но на компьютере моего коллеги - той же версии Windows, IE, загрузка происходит гораздо медленнее, и ответ Безразлично Тайм-аут. Когда я пытаюсь выполнить тестирование на разных виртуальных машинах, проблема не очевидна. Другие коллеги, однако ... о Windows!
Просто чтобы быть ясно
Насколько я знаю, этот код используется для работы!
WinHttpOpen без установленный флаг ASYNC.
Глагол HTTP является POST
код в Delphi XE2
Result:= WinHttpSendRequest(RequestHandle,PWideChar(Headers),Length(Headers),WINHTTP_NO_REQUEST_DATA,0,FormBuffer.Size,Cardinal(Self));
If Result
then begin
BytesToWrite:= FormBuffer.Size;
while BytesToWrite > 0
do begin
If BytesToWrite > SizeOf(WriteBuffer)
then BufFill:= SizeOf(WriteBuffer)
else BufFill:= BytesToWrite;
FormBuffer.ReadBytes(WriteBuffer,BufFill); // FormBuffer is my object to supply data and headers
If WinHttpWriteData(RequestHandle,@WriteBuffer[0],BufFill,Written)
then Dec(BytesToWrite,Written)
else Error('WinHttpWriteData'); // Error() method calls GetLastError, assembles error message and logs it
If Assigned(OnDataWrite)
then OnDataWrite(Self,Written); // Event that notifies user
end;
FetchResponse(RequestHandle); // Calls WinHttpReceiveResponse() and then fetches data
Result:= True;
end
else GLE:= Error('WinHttpSendRequest');
Этот код был в значительной степени адаптации этого кода:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384120(v=vs.85).aspx
" WinHttp Пример кода для PUT. " внизу.