我使用作为自托管进程运行的 Web API 创建了 REST 资源。出于性能原因,我希望能够使用持久 HTTP 连接来调用它。我使用 OWIN 自托管。
我真的很喜欢 System.Net.Http.HttpClient 中用于 GET、POST、PUT、DELETE 的 asnyc 方法。它们很容易调用和处理——它们返回一个 System.Threading.Tasks.Task ,这对我正在尝试做的事情很方便。我更喜欢使用 HttpClient 到 System.Net.HttpWebRequest。
我可能遗漏了一些东西,但对我来说如何使用 HttpClient 创建持久连接并不明显。我正在研究 System.Net.Http.HttpClientHandler 和 System.Net.Http.WebRequestHandler 类,但到目前为止我还没有找到持久连接的选项。Google 找到了各种使用 HttpWebRequest 创建持久连接的示例。它有一个可以设置为 true 的 KeepAlive 属性。有没有办法用 HttpClient 设置它?
默认情况下,HttpWebRequest 将用于向服务器发送请求。可以通过在将 HttpMessageHandler 实例作为参数的构造函数重载之一中指定不同的通道来修改此行为。如果需要身份验证或缓存等功能,可以使用 WebRequestHandler 来配置设置,并且可以将实例传递给构造函数。返回的处理程序可以传递给采用 HttpMessageHandler 参数的构造函数重载之一。
有没有办法在底层 HttpWebRequest 上设置 KeepAlive 功能?
MSDN 文档还说:
HttpClient 类实例充当发送 HTTP 请求的会话。HttpClient 实例是应用于该实例执行的所有请求的设置集合。此外,每个 HttpClient 实例都使用自己的连接池,将其请求与其他 HttpClient 实例执行的请求隔离开来。
我是否可以从中理解,当可以获得性能优势时,连接池将使用持久连接为我优化?如果我希望我的客户只有一个连接怎么办?