WinHttpWriteData似乎是"泛滥"服务器

时间:2014-12-18 13:28:18

标签: delphi winhttp

我正在使用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

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

1 个答案:

答案 0 :(得分:0)

这是AVG ......!

禁用AVG可为上传提供正常的性能......现在只需找出哪些部分正在阻碍。