我试图在WinHTTP中以异步模式读取EWS流式通知流,但是我在读取整个块时遇到了麻烦-不少于多。
如果使用WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
回调,则得到的数据少于服务器在块中发送的数据,并且WinHttpReadData
仅使用我请求的数据触发WINHTTP_CALLBACK_STATUS_READ_COMPLETE
回调。如果我请求更多(例如,固定缓冲区大小为8kB),则WINHTTP_CALLBACK_STATUS_READ_COMPLETE
直到整个缓冲区都返回后才会触发,这意味着它将等待下一个通知(无论何时到达)再返回任何数据。
在获得格式正确的XML之前,我真的不想一次读取一个字节。我想在WinHTTP级别上检索数据,而无需了解其格式。
更多详细信息:
当WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
回调触发时,我呼叫WinHttpReceiveResponse
开始收听来自服务器的回复。
当WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
触发时,我检查HTTP状态代码并调用WinHttpQueryDataAvailable
。
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
触发并告诉我有多少可用数据。我打电话给WinHttpReadData
,指定数据大小
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
触发并向我提供所需的数据。
接下来我该怎么办?再次致电WinHttpQueryDataAvailable
?但是我怎么知道块的大小呢?有什么方法可以查询请求以找出当前块的大小?