Eksperimen Baru: Memanggil .NET gRPC Services dari Browser dengan gRPC-Web

Kami senang mengumumkan dukungan eksperimental untuk gRPC-Web dengan .NET. gRPC-Web memungkinkan Anda untuk memanggil gRPC dari aplikasi berbasis browser seperti JavaScript SPA atau aplikasi Blazor WebAssembly.

gRPC-Web untuk .NET berjanji untuk membawa banyak fitur gRPC yang hebat ke aplikasi browser:

  • Klien Yang Menghasilkan Kode Yang Diketik Ketat
  • Posting Protobuf Ringkas
  • Streaming Server



Apa itu gRPC-Web


Tidak mungkin untuk mengimplementasikan spesifikasi gRPC HTTP / 2 di browser karena tidak ada API browser dengan kontrol terperinci yang cukup atas permintaan HTTP. gRPC-Web  memecahkan masalah ini dengan menjadi kompatibel dengan HTTP / 1.1 dan HTTP / 2.

gRPC-Web bukan teknologi baru. Ada klien gRPC-Web JavaScript yang stabil  , serta  proxy untuk terjemahan antara gRPC dan gRPC-Web  untuk layanan. Paket eksperimental baru memungkinkan aplikasi ASP.NET Core gRPC untuk mendukung gRPC-Web tanpa server proxy dan memungkinkan klien .NET Core gRPC untuk menjalankan layanan gRPC-Web. (Bagus untuk aplikasi Blazor WebAssembly!)

Fitur baru dengan gRPC-Web


  • Panggil aplikasi ASP.NET Core gRPC dari browser - Browser API tidak dapat memanggil gRPC HTTP / 2. gRPC-Web menawarkan alternatif yang kompatibel.
    • SPA JavaScript
    • Aplikasi Perakitan Web NET Blazor
  • Host aplikasi ASP.NET Core gRPC di Layanan Aplikasi IIS dan Azure. Beberapa server, seperti IIS dan Layanan Aplikasi Azure, saat ini tidak dapat meng-host layanan gRPC. Sementara mereka secara aktif mengerjakannya, gRPC-Web menawarkan alternatif menarik yang saat ini bekerja di lingkungan apa pun.
  • Panggil gRPC dari platform selain .NET Core. Beberapa platform .NET HttpClienttidak mendukung HTTP / 2. gRPC-Web dapat digunakan untuk menjalankan layanan gRPC pada platform ini (mis. Blazor WebAssembly, Xamarin).

Perhatikan bahwa gRPC-Web memiliki kinerja rendah dan dua fitur gRPC tidak lagi didukung: streaming klien dan streaming dua arah. (streaming ke server masih didukung!)

Instruksi Server GRPC-Web


Jika Anda belum mempelajari gRPC di .NET, berikut ini adalah  tutorial sederhana sehingga Anda dapat memulai .

gRPC-Web tidak memerlukan perubahan pada layanan Anda, satu-satunya modifikasi adalah konfigurasi awal. Untuk mengaktifkan gRPC-Web dengan layanan ASP.NET Core gRPC, tambahkan tautan ke paket Grpc.AspNetCore.Web . Konfigurasikan aplikasi untuk menggunakan gRPC-Web, menambahkan AddGrpcWeb(...), dan UseGrpcWeb()file startup: 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();
    });
}

Memanggil gRPC-Web dari browser mungkin memerlukan konfigurasi tambahan, misalnya, mengonfigurasi aplikasi untuk mendukung CORS.

Instruksi GRPC-Web Klien


Klien gRPC-Web JavaScript memiliki instruksi  untuk menyiapkan klien gRPC-Web untuk digunakan dalam browser JavaScript SPA.

Memanggil gRPC-Web dengan klien .NET mirip dengan gRPC biasa, satu-satunya perubahan adalah cara saluran dibuat. Untuk mengaktifkan gRPC-Web, tambahkan tautan ke paket Grpc.Net.Client.Web . Konfigurasikan saluran untuk digunakan 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" });

Untuk melihat gRPC-Web dengan .NET beraksi, baca posting blog paling keren dari kolega kami yang menggunakan  gRPC-Web di Blazor WebAssembly .

Coba gRPC-Web dengan ASP.NET Core hari ini


Paket pratinjau di NuGet:


Anda dapat menemukan dokumentasi tentang penggunaan gRPC-Web dengan .NET Core di  sini .

Catatan: sementara gRPC-Web untuk .NET hanyalah proyek percobaan, bukan produk yang didukung.

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


All Articles