c++ - WinHttpSendRequest : 2148074273 insufficient cache

标签 c++ windows winapi cpprest-sdk

我正在使用 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/

相关文章:

c++ - 是否可以通过溢出 C 中的第一个元素来写入数组的第二个元素?

c++ - 如何增加人口/永无止境的循环

windows - 对 .bat 文件使用自定义 Tee 命令

windows - 从 64 位应用程序使用 32 位进程内 COM 服务器的简单方法有哪些?

winapi - Direct3D 中的 COM 对象

c++ - 如何在同一行格式化右对齐和左对齐?

c++ - decltype 和隐藏外部名称的类成员名称之间的交互

c# - 确定 Windows 应用商店应用程序是否已从 Windows 服务中暂停或逻辑删除

windows - 如何实现进程内全文搜索引擎

c - MD5 Crypto API 为某些明文返回不正确的散列