【问题标题】:WinHttpWriteData seems to be "flooding" serverWinHttpWriteData 似乎是“洪水”服务器
【发布时间】:2015-02-17 07:22:04
【问题描述】:

我正在使用 WinHttpSendRequest/WinHttpWriteData 将一个大 (54Mb) 文件上传到我们的服务器,并以 4Kb 的形式发送给用户反馈。据我所知,直到最近,这一直运作良好。现在,当我尝试时,上传速度非常快,然后 WinHttpReceiveResponse() 调用超时,服务器接收到不完整的数据。

我使用的是 Win 8.1 64bit,IE11 11.0.15(我认为 WinHttp 是用 IE 更新的)但是在我同事的 PC 上 - 相同版本的 Windows,IE,上传速度要慢得多并且响应不会超时。当我尝试在各种虚拟机上进行测试时,问题并不明显。但是其他同事……哦,Windows!

说清楚

  1. 据我所知,这段代码曾经可以工作!

  2. 调用 WinHttpOpen 没有设置 ASYNC 标志。

  3. 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 示例代码”。在底部。

【问题讨论】:

    标签: delphi winhttp


    【解决方案1】:

    这是 AVG ......!

    禁用 AVG 后,上传性能正常……现在只需找出阻碍的部分即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2013-05-21
      • 2017-09-05
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多