我正在使用WinHttpSendRequest / WinHttpWriteData将大型(54Mb)文件上传到我们的服务器,以4Kb块的形式发送它以提供用户反馈。据我所知,直到最近,这一直运作良好。现在,当我尝试它时,上传速度非常快,然后WinHttpReceiveResponse()调用超时,服务器收到不完整的数据。
我正在使用Win 8.1 64bit,IE11 11.0.15(我认为 WinHttp是用IE更新的)但是在我的同事的PC上 - 相同版本的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
“进行PUT的WinHttp示例代码”。在底部。
答案 0 :(得分:0)
这是AVG ......!
禁用AVG可为上传提供正常的性能......现在只需找出哪些部分正在阻碍。