Здравствуйте, jacque, Вы писали:
J>Доброго времени суток. J>Приложение посылает xml-запросы серверу и получает их в таком же виде. J>Имею возможность видеть лог сервиса на сервере, ко мне уходит "большой"(24к) ответ, InternetReadFile читает маленький кусочек и все, а когда я закрываю handle запроса вываливаеться исключение win32. J>Код J> if (!HttpSendRequest(hRequest, NULL, 0, (LPVOID)postData, postDataSize)) //шлю хмл J> { J> ret = EHTTPERROR_CreateHTTPRequestFailed; J> break; J> }
J> if (!HttpEndRequest(hRequest, NULL, 0, 0)) J> { J> DWORD d = GetLastError();
J> ret = EHTTPERROR_CreateHTTPRequestFailed; J> break; J> } J> // read answer J> char buff[ 1024 ]; J> int recived = 0; J> while (1) J> { J> DWORD nread = 0; J> if (!InternetReadFile(hRequest, buff, 1024, &nread)) //читает все время 1736 байт от длиного ответа J> { J> ret = EHTTPERROR_CreateHTTPRequestFailed; J> break; J> } J> if (nread) J> { J> int oldSize = recived; J> recived += nread; J> memcpy(recvData + oldSize, buff, nread); J> } J> else J> break; J> }
J> recvData[ recived ] = 0;
J> break; J> }
J> if (hRequest) J> InternetCloseHandle(hRequest); //исключение, так как не все дочитал
1. По какому условию заканчивается цикл? Если InternetReadFile возвращает FALSE, то какой код ошибки выдает GetLastError?
2. Вы уверены, что в recvData достаточно места, чтобы получить все данные?
3. InternetCloseHandle не будет бросать исключение если не все данные прочитаны. Скорее, вы где-то память портите.