ASP.NET Core 3.0 gRPC 配置使用HTTP

前言

gRPC是基於http/2,是同時支持https和http協議的,咱們在gRPC實際使用中,在內網通信場景下,更多的是走http協議,達到更高的效率,下面介紹如何在 .NET Core 3.0 中如何爲gRPC配置http。web

服務端配置Kestrel

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

相關資料: https://docs.microsoft.com/en-us/aspnet/core/grpc/troubleshoot?view=aspnetcore-3.0&WT.mc_id=DT-MVP-5003133get

相關文章
相關標籤/搜索