0
  • 我们正在使用一个用 Apache 编写的基于 HTTPS REST 的 Web 服务。
  • 我们的客户端是用 .NET 框架 4.5 编写的,使用 System.Net.Http 库和类 HttpClient 进行连接。
  • 我们使用的基于 REST 的 Web 服务要求我们在标头中附加证书。
  • 以上工作正常。但由于涉及 SSL 协商,请求需要很长时间才能执行(每个请求 300 毫秒)。

问题:如何在 .NET 客户端库中配置/编码 SSL 会话重用,以便后续 Https 连接不必握手并提高性能。

这是我尝试但没有帮助的所有内容:

  1. 试图设置 httpClient.DefaultRequestHeaders.Connection.TryParseAdd("Keep-alive"); //这里httpClient是HttpClient类的一个实例。
  2. 尝试改变keep-alive的外壳
  3. 使用 System.Net.ServicePointManager.SetTcpKeepAlive(true, 10000, 3000) 设置 Tcp Keepalive;// 这就是说,由于 SSL 重新协商发生在 TCP 上,所以保持 Tcp 处于活动状态。
  4. 将连接 http REST 服务器的 web.config 中的 MaxConnections 值设置为 12。

另一个有趣的方面:​​当 REST API 实现者使用带有 keep-alive 标头的 Jmeter 调用 HTTPS REST url 时,他们能够重用 ssl 连接并且性能良好(使用 - 63ms 和不使用 - 300ms)。

有人可以帮助我在.NET方面的设置中缺少什么。

4

1 回答 1

1

现在解决了。问题是我对 HttpClient 类的理解。它的工作方式是 HttpClient 的一个实例为每个创建的实例创建一个连接池。一旦我们将 httpclient 移动到全局或类级别的上下文中,这样在重复调用中就不会重新创建实例,它就像一个魅力。

于 2013-09-20T17:38:17.973 回答