Neues Experiment: Aufrufen von .NET gRPC-Diensten über einen Browser mit gRPC-Web

Wir freuen uns, die experimentelle Unterstützung für gRPC-Web mit .NET bekannt zu geben. Mit gRPC-Web können Sie gRPC aus browserbasierten Anwendungen wie JavaScript SPA oder Blazor WebAssembly-Anwendungen aufrufen.

gRPC-Web für .NET verspricht, Browseranwendungen viele großartige gRPC-Funktionen zu bieten:

  • Streng typisierte Code-generierte Clients
  • Kompakte Protobuf-Pfosten
  • Server-Streaming



Was ist gRPC-Web?


Es ist nicht möglich, die gRPC-HTTP / 2-Spezifikation in einem Browser zu implementieren, da keine Browser-API mit ausreichender detaillierter Kontrolle über HTTP-Anforderungen vorhanden ist. gRPC-Web  löst dieses Problem, indem es mit HTTP / 1.1 und HTTP / 2 kompatibel ist.

gRPC-Web ist keine neue Technologie. Es gibt einen stabilen  gRPC-Web-JavaScript-Client sowie einen  Proxy für die Übersetzung zwischen gRPC und gRPC-Web  für Dienste. Neue experimentelle Pakete ermöglichen es der ASP.NET Core gRPC-Anwendung, gRPC-Web ohne Proxyserver zu unterstützen und dem .NET Core gRPC-Client das Aufrufen von gRPC-Webdiensten zu ermöglichen. (Ideal für Blazor WebAssembly-Anwendungen!)

Neue Funktionen mit gRPC-Web


  • Aufrufen von ASP.NET Core-gRPC-Anwendungen über einen Browser - Browser-APIs können gRPC HTTP / 2 nicht aufrufen. gRPC-Web bietet eine kompatible Alternative.
    • JavaScript SPA
    • .NET Blazor Web Assembly-Anwendungen
  • Hosten Sie ASP.NET Core-gRPC-Anwendungen in IIS und Azure Application Service. Einige Server, wie z. B. IIS und Azure Application Service, können derzeit keine gRPC-Dienste hosten. Während sie aktiv daran arbeiten, bietet gRPC-Web eine interessante Alternative, die heute in jeder Umgebung funktioniert.
  • Rufen Sie gRPC von anderen Plattformen als .NET Core auf. Einige .NET-Plattformen HttpClientunterstützen HTTP / 2 nicht. Mit gRPC-Web können gRPC-Dienste auf diesen Plattformen aufgerufen werden (z. B. Blazor WebAssembly, Xamarin).

Beachten Sie, dass die Leistung von gRPC-Web gering ist und zwei gRPC-Funktionen nicht mehr unterstützt werden: Client-Streaming und Zwei-Wege-Streaming. (Streaming zum Server wird weiterhin unterstützt!)

GRPC-Webserver-Anweisungen


Wenn Sie gRPC in .NET noch nicht studiert haben, finden Sie hier ein  einfaches Tutorial, damit Sie loslegen können .

gRPC-Web erfordert keine Änderungen an Ihren Diensten. Die einzige Änderung ist die Erstkonfiguration. Fügen Sie den Link zum Paket Grpc.AspNetCore.Web hinzu, um gRPC-Web mit dem ASP.NET Core gRPC-Dienst zu aktivieren . Konfigurieren Sie die Anwendung für die Verwendung von gRPC-Web, Hinzufügen AddGrpcWeb(...)und UseGrpcWeb()der Startdatei: Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    //    gRPC-Web     
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

Das Aufrufen von gRPC-Web über einen Browser erfordert möglicherweise eine zusätzliche Konfiguration, z. B. das Konfigurieren einer Anwendung zur Unterstützung von CORS.

GRPC-Web Client-Anweisungen


Der gRPC-Web-JavaScript-Client enthält Anweisungen  zum Einrichten des gRPC-Web-Clients zur Verwendung im JavaScript-SPA-Browser.

Das Aufrufen von gRPC-Web mit einem .NET-Client ähnelt dem regulären gRPC. Die einzige Änderung ist die Art und Weise, wie der Kanal erstellt wird. Fügen Sie zum Aktivieren von gRPC-Web den Link zum Paket Grpc.Net.Client.Web hinzu . Konfigurieren Sie den zu verwendenden Kanal GrpcWebHandler:

//     gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

Um gRPC-Web mit .NET in Aktion zu sehen, lesen Sie den coolsten Blog-Beitrag unseres Kollegen, der  gRPC-Web in Blazor WebAssembly verwendet hat .

Probieren Sie gRPC-Web noch heute mit ASP.NET Core aus


Vorschau von Paketen auf NuGet:


Eine Dokumentation zur Verwendung von gRPC-Web mit .NET Core finden Sie  hier .

Hinweis: Während gRPC-Web für .NET nur ein Pilotprojekt ist, kein unterstütztes Produkt.

Source: https://habr.com/ru/post/undefined/


All Articles