使用分块数据异步WinHTTP-读取整个块

时间:2019-05-21 03:46:36

标签: http exchangewebservices winhttp

我试图在WinHTTP中以异步模式读取EWS流式通知流,但是我在读取整个块时遇到了麻烦-不少于多。

如果使用WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE回调,则得到的数据少于服务器在块中发送的数据,并且WinHttpReadData仅使用我请求的数据触发WINHTTP_CALLBACK_STATUS_READ_COMPLETE回调。如果我请求更多(例如,固定缓冲区大小为8kB),则WINHTTP_CALLBACK_STATUS_READ_COMPLETE直到整个缓冲区都返回后才会触发,这意味着它将等待下一个通知(无论何时到达)再返回任何数据。

在获得格式正确的XML之前,我真的不想一次读取一个字节。我想在WinHTTP级别上检索数据,而无需了解其格式。

更多详细信息:

  1. WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE回调触发时,我呼叫WinHttpReceiveResponse开始收听来自服务器的回复。

  2. WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE触发时,我检查HTTP状态代码并调用WinHttpQueryDataAvailable

  3. WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE触发并告诉我有多少可用数据。我打电话给WinHttpReadData,指定数据大小

  4. WINHTTP_CALLBACK_STATUS_READ_COMPLETE触发并向我提供所需的数据。

接下来我该怎么办?再次致电WinHttpQueryDataAvailable?但是我怎么知道块的大小呢?有什么方法可以查询请求以找出当前块的大小?

0 个答案:

没有答案