我正在使用 cpprest-sdk 构建一个 Rest 客户端来与 Web 服务进行通信。问题是,每隔一段时间,在发送多个成功的请求(大约 50 个)后,我会收到异常:
WinHttpSendRequest: 2148074273 insufficient cache in function
或者有时:
ERROR_WINHTTP_SECURE_FAILURE (12175)
我尝试在 cpprest-sdk 中查找缓存选项,但没有找到任何内容。由于当我在任务中调用 .wait()
时,cpprest-sdk 内部发生异常,因此我不确定是否可以使用 WINHTTP_STATUS_CALLBACK 来检查有关此错误的更多详细信息。如何更深入地调查以找出此错误的原因?
这是我的休息请求:
void MyRestClient::PostKeys(const std::string & sKek, const std::string & sKid, const std::string & sCustomerAuthenticator) {
uri_builder oBuilder(U("/keys?customerAuthenticator=") + to_string_t(sCustomerAuthenticator));
oBuilder.append_query(KEK, to_string_t(sKek));
json::value oBody;
oBody[KID] = json::value::string(to_string_t(sKid));
web::http::http_request oRequest;
oRequest.set_method(methods::POST);
oRequest.set_request_uri(oBuilder.to_uri());
oRequest.set_body(oBody);
m_oCurrentTask = oClient.request(oRequest).then([this](http_response oResponse) {
OnPostResponse(oResponse);
});
}
根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa383928(v=vs.85).aspx (第四个项目符号),Post 请求不应被缓存,所以我不明白为什么我会收到第一个异常。我还尝试按照链接中的第 6 个项目符号建议禁用 HTTPS 缓存,但这并没有改变任何内容。
有人经历过类似的事情或者对可能发生的事情有任何见解吗?或者这是正常行为,我应该在发生这些异常时重试我的请求吗?
最佳答案
您的 Web 服务是否使用 TLS 和 Diffie-Hellman key 交换?如果是,您可能会在 SChannel(Windows 的 SSL 实现)中看到一个错误,请参阅 here for a confirmation 。不幸的是,唯一可用的修复是将客户端运行的 Windows 版本更新为最新版本的 Windows 10。
关于c++ - WinHttpSendRequest : 2148074273 insufficient cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43376322/