0

私のマシン/プロジェクトの詳細:

  1. Windows のバージョンは 10 Enterprise 1903 (OS ビルド 18362.295) です。
  2. 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.Version1.1を取得しresponse.Versionます。ローカル uri を Google の戻り値 2.0 に置き換えると、応答で返されます (したがって、上記のコードは正しいです)。

HttpSysOptionsには、http2 に関連するパラメーターもありません。他に何が欠けているか知っている人はいますか?

4

0 に答える 0