gRPC是基於http/2,是同時支持https和http協議的,咱們在gRPC實際使用中,在內網通信場景下,更多的是走http協議,達到更高的效率,下面介紹如何在 .NET Core 3.0 中如何爲gRPC配置http。web
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureKestrel(options => { // Setup a HTTP/2 endpoint without TLS. options.ListenLocalhost(5000, o => o.Protocols = HttpProtocols.Http2); }); webBuilder.UseStartup<Startup>(); });
主要是這句話 Protocols = HttpProtocols.Http2
讓kestrel支持無 tls http/2asp.net
在最新的asp.net core 中,http端口默認已經配置了,因此服務端配置不是必須的ui
客戶端須要在建立 grpc 調用之前設置:.net
AppContext.SetSwitch( "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
示例:code
AppContext.SetSwitch( "System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); var channel = GrpcChannel.ForAddress("http://localhost:5000"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "曉晨" }); Console.WriteLine("調用Greeter服務 : " + reply.Message);
客戶端跨語言調用非tls gRPC都須要這樣設置。rpc