Bagikan melalui


Migrasi gRPC dari C-core ke gRPC untuk .NET

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Penting

Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Karena implementasi tumpukan yang mendasar, tidak semua fitur berfungsi dengan cara yang sama antara aplikasi gRPC berbasis C-core dan gRPC untuk .NET. Dokumen ini menyoroti perbedaan utama untuk migrasi di antara dua tumpukan.

Penting

gRPC C-core berada dalam mode pemeliharaan dan tidak akan digunakan lagi demi gRPC untuk .NET. gRPC C-core tidak disarankan untuk aplikasi baru.

Dukungan platform

gRPC C-core dan gRPC untuk .NET memiliki dukungan platform yang berbeda:

  • gRPC C-core: Implementasi C++ gRPC dengan tumpukan TLS dan HTTP/2 sendiri. Paket Grpc.Core ini adalah pembungkus .NET di sekitar gRPC C-core dan berisi klien dan server gRPC. Ini mendukung .NET Framework, .NET Core, dan .NET 5 atau yang lebih baru.
  • gRPC untuk .NET: Dirancang untuk .NET Core 3.x dan .NET 5 atau yang lebih baru. Ini menggunakan tumpukan TLS dan HTTP/2 yang dibangun ke dalam rilis .NET modern. Paket Grpc.AspNetCore berisi server gRPC yang dihosting di ASP.NET Core dan memerlukan .NET Core 3.x atau .NET 5 atau yang lebih baru. Paket Grpc.Net.Client berisi klien gRPC. Klien di Grpc.Net.Client memiliki dukungan terbatas untuk .NET Framework menggunakan WinHttpHandler.

Untuk informasi selengkapnya, lihat gRPC pada platform yang didukung .NET.

Mengonfigurasi server dan saluran

Paket, konfigurasi, dan kode startup NuGet harus dimodifikasi saat bermigrasi dari gRPC C-Core ke gRPC untuk .NET.

gRPC untuk .NET memiliki paket NuGet terpisah untuk klien dan servernya. Paket yang ditambahkan bergantung pada apakah aplikasi menghosting layanan gRPC atau memanggilnya:

Setelah migrasi selesai, Grpc.Core paket harus dihapus dari aplikasi. Grpc.Core berisi biner asli besar, dan menghapus paket mengurangi waktu pemulihan NuGet dan ukuran aplikasi.

Layanan dan klien yang dihasilkan kode

gRPC C-Core dan gRPC untuk .NET berbagi banyak API, dan kode yang dihasilkan dari .proto file kompatibel dengan kedua implementasi gRPC. Sebagian besar klien dan layanan dapat dimigrasikan dari C-Core ke gRPC untuk .NET tanpa perubahan.

Masa pakai implementasi layanan gRPC

Di tumpukan ASP.NET Core, layanan gRPC, secara default, dibuat dengan masa pakai terlingkup. Sebaliknya, GRPC C-core secara default mengikat ke layanan dengan masa pakai singleton.

Masa pakai terlingkup memungkinkan implementasi layanan untuk menyelesaikan layanan lain dengan masa pakai terlingkup. Misalnya, masa pakai tercakup juga dapat diselesaikan DbContext dari kontainer DI melalui injeksi konstruktor. Menggunakan masa pakai terlingkup:

  • Instans baru implementasi layanan dibangun untuk setiap permintaan.
  • Tidak dimungkinkan untuk berbagi status antara permintaan melalui anggota instans pada jenis implementasi.
  • Harapannya adalah untuk menyimpan status bersama dalam layanan singleton dalam kontainer DI. Status bersama yang disimpan diselesaikan dalam konstruktor implementasi layanan gRPC.

Untuk informasi selengkapnya tentang masa pakai layanan, lihat Injeksi dependensi di ASP.NET Core.

Menambahkan layanan singleton

Untuk memfasilitasi transisi dari implementasi C-core gRPC ke ASP.NET Core, Anda dapat mengubah masa pakai layanan implementasi layanan dari cakupan ke singleton. Ini melibatkan penambahan instans implementasi layanan ke kontainer DI:

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

Namun, implementasi layanan dengan masa pakai singleton tidak lagi dapat menyelesaikan layanan terlingkup melalui injeksi konstruktor.

Mengonfigurasi opsi layanan gRPC

Di aplikasi berbasis C-core, pengaturan seperti grpc.max_receive_message_length dan grpc.max_send_message_length dikonfigurasi saat ChannelOption membuat instans Server.

Di ASP.NET Core, gRPC menyediakan konfigurasi melalui jenis .GrpcServiceOptions Misalnya, layanan gRPC ukuran pesan masuk maksimum dapat dikonfigurasi melalui AddGrpc. Contoh berikut mengubah default MaxReceiveMessageSize 4 MB menjadi 16 MB:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
    });
}

Untuk informasi selengkapnya tentang konfigurasi, lihat konfigurasi gRPC untuk .NET.

Pencatatan

Aplikasi berbasis C-core mengandalkan GrpcEnvironment untuk mengonfigurasi pencatat untuk tujuan penelusuran kesalahan. Tumpukan ASP.NET Core menyediakan fungsionalitas ini melalui API Pengelogan. Misalnya, pencatat dapat ditambahkan ke layanan gRPC melalui injeksi konstruktor:

public class GreeterService : Greeter.GreeterBase
{
    public GreeterService(ILogger<GreeterService> logger)
    {
    }
}

Untuk informasi selengkapnya tentang pengelogan dan diagnostik gRPC, lihat Pengelogan dan diagnostik di gRPC di .NET.

HTTPS

Aplikasi berbasis C-core mengonfigurasi HTTPS melalui properti Server.Ports. Konsep serupa digunakan untuk mengonfigurasi server di ASP.NET Core. Misalnya, Kestrel menggunakan konfigurasi titik akhir untuk fungsionalitas ini.

Aplikasi berbasis C-core mengonfigurasi HTTPS melalui properti Server.Ports. Konsep serupa digunakan untuk mengonfigurasi server di ASP.NET Core. Misalnya, Kestrel menggunakan konfigurasi titik akhir untuk fungsionalitas ini.

Interseptor gRPC

ASP.NET Core middleware menawarkan fungsionalitas serupa dibandingkan dengan pencegat di aplikasi gRPC berbasis C-core. Keduanya didukung oleh aplikasi gRPC ASP.NET Core, sehingga tidak perlu menulis ulang pencegat.

Untuk informasi selengkapnya tentang bagaimana fitur ini dibandingkan satu sama lain, lihat Interseptor gRPC versus Middleware.

Host gRPC dalam proyek non-ASP.NET Core

Server berbasis C-core dapat ditambahkan ke jenis proyek apa pun. gRPC untuk server .NET memerlukan ASP.NET Core. ASP.NET Core biasanya tersedia karena file proyek menentukan Microsoft.NET.SDK.Web sebagai SDK.

Server gRPC dapat dihosting <FrameworkReference Include="Microsoft.AspNetCore.App" /> untuk non-ASP.NET proyek Core dengan menambahkan ke proyek. Referensi kerangka kerja membuat API ASP.NET Core tersedia dan dapat digunakan untuk memulai server ASP.NET Core.

Untuk informasi selengkapnya, lihat Host gRPC di proyek non-ASP.NET Core.

Sumber Daya Tambahan: