Bagikan melalui


gRPC untuk konfigurasi .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.

Mengonfigurasi opsi layanan

Layanan gRPC dikonfigurasi dengan AddGrpc di Startup.cs. Opsi konfigurasi ada dalam Grpc.AspNetCore.Server paket.

Tabel berikut menjelaskan opsi untuk mengonfigurasi layanan gRPC:

Opsi Nilai Default Deskripsi
MaxSendMessageSize null Ukuran pesan maksimum dalam byte yang dapat dikirim dari server. Mencoba mengirim pesan yang melebihi ukuran pesan maksimum yang dikonfigurasi menghasilkan pengecualian. Saat diatur ke null, ukuran pesan tidak terbatas.
MaxReceiveMessageSize 4 MB Ukuran pesan maksimum dalam byte yang dapat diterima oleh server. Jika server menerima pesan yang melebihi batas ini, server akan melemparkan pengecualian. Meningkatkan nilai ini memungkinkan server untuk menerima pesan yang lebih besar, tetapi dapat berdampak negatif pada konsumsi memori. Saat diatur ke null, ukuran pesan tidak terbatas.
EnableDetailedErrors false Jika true, pesan pengecualian terperinci dikembalikan ke klien ketika pengecualian dilemparkan dalam metode layanan. Default adalah false. Pengaturan EnableDetailedErrors ke true dapat membocorkan informasi sensitif.
CompressionProviders gzip Kumpulan penyedia kompresi yang digunakan untuk mengompresi dan mendekompresi pesan. Penyedia kompresi kustom dapat dibuat dan ditambahkan ke koleksi. Penyedia default yang dikonfigurasi mendukung kompresi gzip .
ResponseCompressionAlgorithm null Algoritma kompresi yang digunakan untuk mengompresi pesan yang dikirim dari server. Algoritma harus cocok dengan penyedia kompresi di CompressionProviders. Agar algoritma memadatkan respons, klien harus menunjukkan bahwa algoritma mendukung algoritma dengan mengirimkannya di header pengodean grpc-accept.
ResponseCompressionLevel null Tingkat kompres yang digunakan untuk memadatkan pesan yang dikirim dari server.
Interceptors Tidak Kumpulan pencegat yang dijalankan dengan setiap panggilan gRPC. Pencegat dijalankan dalam urutan terdaftar. Pencegat yang dikonfigurasi secara global dijalankan sebelum pencegat dikonfigurasi untuk satu layanan.

Pencegat memiliki masa pakai per permintaan secara default. Konstruktor pencegat dipanggil dan parameter diselesaikan dari injeksi dependensi (DI). Jenis pencegat juga dapat didaftarkan dengan DI untuk mengambil alih cara pembuatannya dan masa pakainya.

Pencegat menawarkan fungsionalitas serupa dibandingkan dengan middleware inti ASP.NET. Untuk informasi selengkapnya, lihat gRPC Interceptors vs. Middleware.
IgnoreUnknownServices false Jika true, panggilan ke layanan dan metode yang tidak diketahui tidak mengembalikan status UNIMPLEMENTED , dan permintaan lolos ke middleware terdaftar berikutnya di ASP.NET Core.

Opsi dapat dikonfigurasi untuk semua layanan dengan menyediakan opsi yang mendelegasikan ke AddGrpc panggilan di Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.EnableDetailedErrors = true;
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

Opsi untuk satu layanan mengambil alih opsi global yang disediakan dan dapat dikonfigurasi AddGrpc menggunakan AddServiceOptions<TService>:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc().AddServiceOptions<MyService>(options =>
    {
        options.MaxReceiveMessageSize = 2 * 1024 * 1024; // 2 MB
        options.MaxSendMessageSize = 5 * 1024 * 1024; // 5 MB
    });
}

Penyadap layanan memiliki masa pakai per permintaan secara default. Mendaftarkan jenis pencegat dengan DI mengambil alih bagaimana pencegat dibuat dan masa pakainya.

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.Interceptors.Add<LoggingInterceptor>();
    });
    services.AddSingleton<LoggingInterceptor>();
}

opsi server ASP.NET Core

Grpc.AspNetCore.Server dihosting oleh server web ASP.NET Core. Ada sejumlah opsi untuk server ASP.NET Core, termasuk Kestrel, IIS dan HTTP.sys. Setiap server menawarkan opsi tambahan tentang bagaimana permintaan HTTP dilayani.

Server yang digunakan oleh aplikasi ASP.NET Core dikonfigurasi dalam kode pengaktifan aplikasi. Server defaultnya adalah Kestrel.

Untuk informasi selengkapnya tentang berbagai server dan opsi konfigurasinya, lihat:

Mengonfigurasi opsi klien

Konfigurasi klien gRPC diatur pada GrpcChannelOptions. Opsi konfigurasi ada dalam Grpc.Net.Client paket.

Tabel berikut menjelaskan opsi untuk mengonfigurasi saluran gRPC:

Opsi Nilai Default Deskripsi
HttpHandler Instans baru Yang HttpMessageHandler digunakan untuk melakukan panggilan gRPC. Klien dapat diatur untuk mengonfigurasi handler kustom HttpClientHandler atau menambahkan handler tambahan ke alur HTTP untuk panggilan gRPC. Jika tidak HttpMessageHandler ditentukan, instans baru HttpClientHandler dibuat untuk saluran dengan pembuangan otomatis.
HttpClient null Yang HttpClient digunakan untuk melakukan panggilan gRPC. Pengaturan ini adalah alternatif untuk HttpHandler.
DisposeHttpClient false Jika diatur ke true dan HttpMessageHandler atau HttpClient ditentukan, maka HttpHandler baik atau HttpClient, masing-masing, dibuang ketika GrpcChannel dibuang.
LoggerFactory null yang LoggerFactory digunakan oleh klien untuk mencatat informasi tentang panggilan gRPC. Instans LoggerFactory dapat diselesaikan dari injeksi dependensi atau dibuat menggunakan LoggerFactory.Create. Untuk contoh mengonfigurasi pengelogan, lihat Pengelogan dan diagnostik di gRPC di .NET.
MaxSendMessageSize null Ukuran pesan maksimum dalam byte yang dapat dikirim dari klien. Mencoba mengirim pesan yang melebihi ukuran pesan maksimum yang dikonfigurasi menghasilkan pengecualian. Saat diatur ke null, ukuran pesan tidak terbatas.
MaxReceiveMessageSize 4 MB Ukuran pesan maksimum dalam byte yang dapat diterima oleh klien. Jika klien menerima pesan yang melebihi batas ini, klien akan melemparkan pengecualian. Meningkatkan nilai ini memungkinkan klien untuk menerima pesan yang lebih besar, tetapi dapat berdampak negatif pada konsumsi memori. Saat diatur ke null, ukuran pesan tidak terbatas.
Credentials null Instans ChannelCredentials. Kredensial digunakan untuk menambahkan metadata autentikasi ke panggilan gRPC.
CompressionProviders gzip Kumpulan penyedia kompresi yang digunakan untuk mengompresi dan mendekompresi pesan. Penyedia kompresi kustom dapat dibuat dan ditambahkan ke koleksi. Penyedia default yang dikonfigurasi mendukung kompresi gzip .
ThrowOperationCanceledOnCancellation false Jika diatur ke true, klien melempar OperationCanceledException ketika panggilan dibatalkan atau tenggat waktunya terlampaui.
UnsafeUseInsecureChannelCallCredentials false Jika diatur ke true, CallCredentials diterapkan ke panggilan gRPC yang dilakukan oleh saluran yang tidak aman. Mengirim header autentikasi melalui koneksi yang tidak aman memiliki implikasi keamanan dan tidak boleh dilakukan di lingkungan produksi.
MaxRetryAttempts 5 Upaya coba lagi maksimum. Nilai ini membatasi nilai upaya coba lagi dan hedging yang ditentukan dalam konfigurasi layanan. Mengatur nilai ini saja tidak mengaktifkan percobaan ulang. Percobaan ulang diaktifkan dalam konfigurasi layanan, yang dapat dilakukan menggunakan ServiceConfig. Nilai null menghapus batas upaya coba lagi maksimum. Untuk informasi selengkapnya tentang percobaan ulang, lihat Penanganan kesalahan sementara dengan percobaan ulang gRPC.
MaxRetryBufferSize 16 MB Ukuran buffer maksimum dalam byte yang dapat digunakan untuk menyimpan pesan terkirim saat mencoba kembali atau melakukan hedging panggilan. Jika batas buffer terlampaui, maka tidak ada lagi upaya coba lagi yang dilakukan dan semua panggilan hedging tetapi satu akan dibatalkan. Batas ini diterapkan di semua panggilan yang dilakukan menggunakan saluran. Nilai null menghapus batas ukuran buffer percobaan kembali maksimum.
MaxRetryBufferPerCallSize 1 MB Ukuran buffer maksimum dalam byte yang dapat digunakan untuk menyimpan pesan terkirim saat mencoba kembali atau melakukan hedging panggilan. Jika batas buffer terlampaui, maka tidak ada lagi upaya coba lagi yang dilakukan dan semua panggilan hedging tetapi satu akan dibatalkan. Batas ini diterapkan ke satu panggilan. Nilai null menghapus batas ukuran buffer percobaan kembali maksimum per panggilan.
ServiceConfig null Konfigurasi layanan untuk saluran gRPC. Konfigurasi layanan dapat digunakan untuk mengonfigurasi percobaan ulang gRPC.

Kode berikut:

  • Mengatur ukuran pesan kirim dan terima maksimum di saluran.
  • Membuat klien.
static async Task Main(string[] args)
{
    var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        MaxReceiveMessageSize = 5 * 1024 * 1024, // 5 MB
        MaxSendMessageSize = 2 * 1024 * 1024 // 2 MB
    });
    var client = new Greeter.GreeterClient(channel);

    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
}

Perhatikan bahwa pencegat klien tidak dikonfigurasi dengan GrpcChannelOptions. Sebagai gantinya, pencegat klien dikonfigurasi menggunakan Intercept metode ekstensi dengan saluran. Metode ekstensi ini ada di Grpc.Core.Interceptors namespace layanan.

static async Task Main(string[] args)
{
    var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var callInvoker = channel.Intercept(new LoggingInterceptor());
    var client = new Greeter.GreeterClient(callInvoker);

    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
}

opsi handler System.Net

Grpc.Net.Client menggunakan transportasi HTTP yang berasal dari HttpMessageHandler untuk membuat permintaan HTTP. Setiap handler menawarkan opsi tambahan tentang cara permintaan HTTP dibuat.

Handler dikonfigurasi pada saluran dan dapat ditimpa dengan mengatur GrpcChannelOptions.HttpHandler. .NET Core 3 dan .NET 5 atau yang SocketsHttpHandler lebih baru menggunakan secara default. Aplikasi klien gRPC di .NET Framework harus mengonfigurasi WinHttpHandler.

Untuk informasi selengkapnya tentang berbagai handler dan opsi konfigurasinya, lihat:

Sumber Daya Tambahan: