私のマシン/プロジェクトの詳細:
- Windows のバージョンは 10 Enterprise 1903 (OS ビルド 18362.295) です。
- Dotnet コア バージョンは 2.2.106、ターゲット フレームワーク バージョンは 4.6.2
これは、コードでサーバーをセットアップする方法です。
IWebHost localWebHost = new WebHostBuilder()
.UseHttpSys()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseApplicationInsights(instrumentationKey)
.UseStartup<Startup>()
.UseUrls("http://+:8644")
.Build();
ただし、http バージョン 2.0 で呼び出すと、1.1 で応答が返されます (以下の LinqPad スクリプト)。
async Task Main()
{
using (var httpClient = new HttpClient(new Http2CustomHandler()))
{
var stopwatch = new Stopwatch();
stopwatch.Restart();
var response = await httpClient.SendAsync(new HttpRequestMessage
{
Method = HttpMethod.Get,
// replacing uri with "https://www.google.com" returns http version 2.0
RequestUri = new Uri("http://localhost:8644/api/health", UriKind.Absolute)
});
response.RequestMessage.Version.Dump();
response.Version.Dump();
stopwatch.ElapsedMilliseconds.Dump();
}
}
public class Http2CustomHandler : WinHttpHandler
{
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
request.Version = new Version("2.0");
return base.SendAsync(request, cancellationToken);
}
}
から 2.0 を取得しますが、 からresponse.RequestMessage.Version
1.1を取得しresponse.Version
ます。ローカル uri を Google の戻り値 2.0 に置き換えると、応答で返されます (したがって、上記のコードは正しいです)。
HttpSysOptionsには、http2 に関連するパラメーターもありません。他に何が欠けているか知っている人はいますか?