HttpWebRequest
为每个请求创建一个新连接。为什么不分享一个?
我已将"保持活动"选项设置为 true。
测试环境
WIN7 .net core2.1 和 .net core3.0
using System;
using System.Net;
using System.Threading;
namespace Question {
static void Test() {
var uri = new Uri("https://stackoverflow.com/");
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.KeepAlive = true;
using (var webResponse = (HttpWebResponse)webRequest.GetResponse()) {
// nothing
}
}
static void Main(string[] args) {
while (true) {
Test();
Thread.Sleep(1000);
}
}
}
Microsoft希望每个人都使用HttpClient,尽管HttpWebRequest界面对于大多数简单情况来说要直观得多。
他们只在.NET Core中实现了HttpWebRequest,因为.NET Standard需要它。他们没有费心去做一个彻底的实现,使像KeepAlive这样的东西正常工作。.NET Core 中的 HttpWebReequest 是 HttpClient 的精简包装器,为每个调用创建一个新连接(这正是您不应该使用 HttpClient 的方式(。
这里有一篇关于 Http 连接池如何在各种框架中工作的非常好的文章: https://www.stevejgordon.co.uk/httpclient-connection-pooling-in-dotnet-core