2

我正在使用 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 个项目符号),不应缓存 Post 请求,所以我不明白为什么我得到了第一个例外。正如链接中的第 6 个项目符号所建议的那样,我还尝试禁用 Https 缓存,但这并没有改变任何东西。

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

4

1 回答 1

2

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

于 2017-08-04T07:06:09.460 回答