=

Konfigurace .NET Core gRPC na macOS

Od verze ASP.NET Core 3.0 mají vývojáři k dispozici nový typ projektů gRPC, který ideově nahrazuje WCFkové služby, které už se v .NET Core netěší podpoře. Chcete-li gRPC služby vyvíjet na macOS, narazíte na menší nepříjemnosti, které se dají naštěstí jednoduše napravit.

Potíže s podporou TLS

Šablona gRPC projektu je nakonfigurována tak, že automaticky používá HTTP/2 společně s kryptografickým protokolem TLS. Kestrel ale v případě macOS a některých starších verzí Windows (např.: Windows 7) nepodporuje HTTP/2 s TLS. Konkrétně na macOS chybí podpora ALPN (rozšíření TLS). Na macOS se setkáte s hláškou:

Unable to bind to https://localhost:5001 on the IPv4 loopback interface: 'HTTP/2 over TLS is not supported on macOS due to missing ALPN support.'.

Konfigurace serverové části

V rámci vývojářského prostředí tedy potřebujeme Kestrel nakonfigurovat tak, aby používal HTTP/2 bez TLS. Upravený Program.cs serverové části služby tedy může vypadat následovně:

public class Program
{
    public static void Main(string[] args)
    {
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults((webBuilder) =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.ConfigureKestrel((host, options) =>
                {
                    if (host.HostingEnvironment.IsDevelopment())
                    {
                        options.ListenLocalhost(5000, o => o.Protocols = HttpProtocols.Http2);
                    }
                });
            })
            .Build()
            .Run();
    }
}

Konfigurace klientské části

Stejným způsobem je potřeba upravit klientskou aplikaci. Pro tento účel stačí switchnout konfiguraci před vytvořením GrpcChannelu nebo HttpClienta. Komunikace probíhá na portu 5000, který jsem definoval na serverové části.

AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
var channel = GrpcChannel.ForAddress("http://localhost:5000");
var client = new Greet.GreeterClient(channel);

Podpora Protobuf v JetBrains Rider

Komunikace gRPC služeb je založena na Protocal Buffers. Jestliže pro vývoj aplikací používáte Rider, mohu za sebe doporučit osvědčené rozšíření Protobuf Support, které přidává Rideru podporu pro Proto3. Nepříjemné je, že zatím není nikde vidět automaticky generovaný server / client code a do vygenerovaného cs file se lze odnavigovat jen přes referenci (auto decompile dll).

Miroslav Holec

Miroslav Holec

21. listopadu 2019

Tento článek je již velmi zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Veřejná školení

V červnu pořádám v Praze školení pro veřejnost

🧑‍🎓 Design REST API
🧑‍🎓 Vývoj REST API

Nový webinář

25. května pořádám webinář o Minimal APIs v .NET 6.

🧑‍🎓 Podrobnosti o webináři

RestApi.CZ

Právě jsem spustil průvodce Designem REST API

📖 Přečíst restapi.cz
kontakt zde

Dotazy, poptávky a objednávky

mirek@miroslavholec.cz
Loading