=

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. 11. 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.

Videa

RestApi.CZ

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

📖 Přečíst restapi.cz

Veřejná školení Místo Datum Délka Cena bez DPH Poznámky
Novinky v .NET 6 a C# 10 online 13. 10. 2022 1 den 3 900 Kč poslední šance registrovat
Vývoj aplikací v ASP.NET Core Praha + online 11/2022 1 den 4 900 Kč bestseller registrovat
Blazor Server & WebAssembly Praha + online 11/2022 2 dny 10 900 Kč registrovat
ASP.NET Core gRPC Praha + online 11/2022 1 den 4 900 Kč registrovat
Design REST API a Design First Praha + online 11/2022 2 dny 9 900 Kč exkluzivní registrovat
Vývoj REST API s Minimal APIs Praha + online 11/2022 1 den 5 900 Kč exkluzivní registrovat
Vývoj REST API v .NET MVC Praha + online 11/2022 1 den 4 900 Kč bestseller registrovat
Entity Framework Core Praha + online 11/2022 2 dny 11 900 Kč registrovat
Vývoj .NET aplikací pro Azure Praha + online 11/2022 1 den 5 900 Kč nový registrovat

kontakt zde

Dotazy, poptávky a objednávky

mirek@miroslavholec.cz
Loading