WinHttpSendRequest:2148074273缓存不足

时间:2017-04-12 17:47:14

标签: c++ windows winapi cpprest-sdk

我正在使用cpprest-sdk构建一个Rest客户端来与Web服务进行通信。问题在于,每隔一段时间,在发送多个成功请求(大约50个)后,我就会得到异常:

  

WinHttpSendRequest:2148074273功能缓存不足

或者有时候:

  

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(第4个子弹),不应缓存帖子请求,因此我不明白为什么我会收到第一个例外。我还尝试禁用Https缓存作为链接中的第6个子弹建议,但这并没有改变任何东西。

有没有人经历过类似的事情或对可能发生的事情有任何见解?或者这是一种正常的行为,我应该在发生这些异常时重试我的请求吗?

1 个答案:

答案 0 :(得分:1)

您的Web服务是否使用带有Diffie-Hellman密钥交换的TLS?如果是,您可能在SChannel中看到了一个错误,即Windows的SSL实现,请参阅here for a confirmation。不幸的是,唯一可用的修复是将客户端运行的Windows版本更新到最新版本的Windows 10。