Newsgroups : Microsoft : microsoft.public.inetsdk.programming.wininet : 2007 Dec : HTTP PUT File upload-Delay in InternetWriteFile() function!

www.cryer.info
Managed Newsgroup Archive

HTTP PUT File upload-Delay in InternetWriteFile() function!

Subject:HTTP PUT File upload-Delay in InternetWriteFile() function!
Posted by:"Nathan" (nath..@discussions.microsoft.com)
Date:Thu, 13 Dec 2007 21:44:00

Hello,
I am using wininet SDK to upload a file using HTTP PUT to a folder in Apache
Tomcat. Truncated code in c++ is as follows:
      hRequest = HttpOpenRequest (hConnect, pwcsOperation, (wchar_t*)
cstrRecStoreFilePath, NULL, NULL, NULL,  0, 0);
      hFile = CreateFile (pwcsUploadFileName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

      ZeroMemory(&BufferIn, sizeof(INTERNET_BUFFERS));       //  Extra
      BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);
      BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS);     //  Extra

      InternetSetOption(hRequest, INTERNET_OPTION_SEND_TIMEOUT |
INTERNET_OPTION_CONNECT_TIMEOUT, &dwTimeout, sizeof(DWORD));

      if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE &
HSR_ASYNC, 0))
      {

          InternetGetLastResponseInfoW(&dwError, (wchar_t*) wcsBuffer,
&dwBufferSize);
        }
      DWORD sum = 0;
      do
      {
        if  (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer), &dwBytesRead,
NULL)))
        {

          break;

        }

        if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,
&dwBytesWritten)))
        {
                    break;
        }
        sum += dwBytesWritten;
        }
      while (sum < BufferIn.dwBufferTotal) ;

        // Close File handle
      CloseHandle (hFile);
      if(!HttpEndRequest(hRequest, NULL, HSR_ASYNC, 0))
      {
        if (hFile)

        {
          CloseHandle (hFile);
          hFile = NULL;

        }
        if (hRequest)

        {
          InternetCloseHandle (hRequest);
          hRequest = NULL;

        }
        return FALSE;

      }
// Handle cleanup code
  }

  catch (...)

  {

   }

The problem I have is that InternetWriteFile function is causing a delay:
takes more than a second for a file size 10KB. The network connection is 100
MBPS LAN between the machines.

1.    What are the possible reasons for InternetWriteFile delay?
2.    Is there any permission on the folder that I am missing?
3.    If it is a HTTP issue, how do we diagnose the delay?

Any suggestions or inputs appreciated.

Replies:

www.cryer.info
Managed Newsgroup Archive