.net core中Grpc使用報錯:Request protocol 'HTTP/1.1' is not supported.


  顯然這個報錯是說HTTP/1.1不支持。

  首先,我們要知道,Grpc是Google開源的,跨語言的,高性能的遠程過程調用框架,它是以HTTP/2作為通信協議的,所以當我啟動啟用一個服務作為Grpc的服務端(被調用方)時,我們需要將監聽的端口設置成HTTP/2協議的,設置方法有兩種:

  1、修改appsettings.json 

  在根節點下添加下面的配置

"Kestrel": {
      "EndpointDefaults": {
        "Protocols": "Http2"
      }
    }  

  需要注意的是,這個配置是修改默認行為,就是說修改所有端口的監聽默認采用Http2(原來默認是Http1),但有時我們的項目是會監聽多個端口,並不一定全是Http2協議。

  2、手動監聽Kestrel端口

  修改Program中的CreateHostBuilder方法:  

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(options =>
                {
                    options.ListenAnyIP(5000, listenOptions =>
                    {
                        listenOptions.Protocols = HttpProtocols.Http2;
                    });
                });
                webBuilder.UseStartup<Startup>();
            });

  其中使用ConfigureKestrel配置端口和它使用的協議,如果需要監聽多個端口,只需要在使用ListenAnyIP方法監聽即可,這樣就無需改變默認協議了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM