顯然這個報錯是說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方法監聽即可,這樣就無需改變默認協議了。