Aracılığıyla paylaş


.NET yapılandırması için gRPC

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Hizmet seçeneklerini yapılandırma

gRPC hizmetleri içinde Startup.csile AddGrpc yapılandırılır. Yapılandırma seçenekleri pakettedir Grpc.AspNetCore.Server .

Aşağıdaki tabloda gRPC hizmetlerini yapılandırma seçenekleri açıklanmaktadır:

Seçenek Varsayılan Değer Açıklama
MaxSendMessageSize null Sunucudan gönderilebilen bayt cinsinden en büyük ileti boyutu. Yapılandırılan ileti boyutu üst sınırını aşan bir ileti göndermeye çalışmak bir özel durumla sonuçlanmıştır. olarak ayarlandığında nullileti boyutu sınırsızdır.
MaxReceiveMessageSize 4 MB Sunucu tarafından alınabilecek bayt cinsinden ileti boyutu üst sınırı. Sunucu bu sınırı aşan bir ileti alırsa, bir özel durum oluşturur. Bu değerin artırılması sunucunun daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. olarak ayarlandığında nullileti boyutu sınırsızdır.
EnableDetailedErrors false ise true, bir hizmet yönteminde özel durum oluştuğunda istemcilere ayrıntılı özel durum iletileri döndürülür. Varsayılan değer: false. ayarı EnableDetailedErrors true hassas bilgileri sızdırabilir.
CompressionProviders gzip İletileri sıkıştırmak ve açmak için kullanılan sıkıştırma sağlayıcıları koleksiyonu. Özel sıkıştırma sağlayıcıları oluşturulabilir ve koleksiyona eklenebilir. Varsayılan yapılandırılmış sağlayıcılar gzip sıkıştırmasını destekler.
ResponseCompressionAlgorithm null Sunucudan gönderilen iletileri sıkıştırmak için kullanılan sıkıştırma algoritması. Algoritma, içindeki bir sıkıştırma sağlayıcısıyla CompressionProviderseşleşmelidir. Algoritmanın bir yanıtı sıkıştırması için istemcinin algoritmayı grpc-accept-encoding üst bilgisinde göndererek desteklediğini belirtmesi gerekir.
ResponseCompressionLevel null Sunucudan gönderilen iletileri sıkıştırmak için kullanılan sıkıştırma düzeyi.
Interceptors Hiçbiri Her gRPC çağrısıyla çalıştırılacak bir kesme noktası koleksiyonu. Kesiciler, kayıtlı oldukları sırayla çalıştırılır. Genel olarak yapılandırılmış kesme avcıları, tek bir hizmet için yapılandırılan kesme noktası oluşturmadan önce çalıştırılır.

Kesme avcılarının varsayılan olarak istek başına yaşam süresi vardır. Kesme noktası oluşturucu çağrılır ve parametreler bağımlılık eklemeden (DI) çözümlenir. Kesme noktası türü, oluşturulduğu şekli ve ömrünü geçersiz kılmak için DI'ye de kaydedilebilir.

Kesme ASP.NET Core ara yazılımına kıyasla benzer işlevler sunar. Daha fazla bilgi için bkz . gRPC Kesme Makineleri ve Ara Yazılım.
IgnoreUnknownServices false bilinmeyen truehizmetlere ve yöntemlere yapılan çağrılar UNIMPLEMENTED durumu döndürmezse ve istek ASP.NET Core'daki bir sonraki kayıtlı ara yazılıma geçer.

seçenekleri, içinde arama Startup.ConfigureServicesiçin AddGrpc bir seçenek temsilcisi sağlayarak tüm hizmetler için yapılandırılabilir:

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
    });
}

Tek bir hizmet için seçenekler, içinde AddGrpc sağlanan genel seçenekleri geçersiz kılar ve kullanılarak AddServiceOptions<TService>yapılandırılabilir:

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

Hizmet kesme aracılarının varsayılan olarak istek başına yaşam süresi vardır. Kesme noktası türünün DI ile kaydedilmesi, bir kesme noktasının nasıl oluşturulduğunu ve ömrünü geçersiz kılar.

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

ASP.NET Core sunucu seçenekleri

Grpc.AspNetCore.Server bir ASP.NET Core web sunucusu tarafından barındırılır. ASP.NET Core sunucuları için, IIS ve HTTP.sys gibi Kestrelçeşitli seçenekler vardır. Her sunucu, HTTP isteklerinin nasıl sunulduğuna ilişkin ek seçenekler sunar.

ASP.NET Core uygulaması tarafından kullanılan sunucu, uygulama başlatma kodunda yapılandırılır. Varsayılan sunucu şeklindedir Kestrel.

Farklı sunucular ve yapılandırma seçenekleri hakkında daha fazla bilgi için bkz:

İstemci seçeneklerini yapılandırma

gRPC istemci yapılandırması üzerinde GrpcChannelOptionsayarlanır. Yapılandırma seçenekleri pakettedir Grpc.Net.Client .

Aşağıdaki tabloda gRPC kanallarını yapılandırma seçenekleri açıklanmaktadır:

Seçenek Varsayılan Değer Açıklama
HttpHandler Yeni örnek HttpMessageHandler gRPC çağrıları yapmak için kullanılır. İstemci, gRPC çağrıları için özel HttpClientHandler bir yapılandırma veya HTTP işlem hattına ek işleyiciler eklemek üzere ayarlanabilir. Belirtilmezse HttpMessageHandler , kanal için otomatik elden çıkarma ile yeni HttpClientHandler bir örnek oluşturulur.
HttpClient null HttpClient gRPC çağrıları yapmak için kullanılır. Bu ayar, için HttpHandlerbir alternatiftir.
DisposeHttpClient false olarak ayarlanırsa true ve veya HttpMessageHandler HttpClient belirtilirse, HttpHandler atıldığında GrpcChannel sırasıyla veya HttpClientatılır.
LoggerFactory null İstemci LoggerFactory tarafından gRPC çağrıları hakkındaki bilgileri günlüğe kaydetmek için kullanılır. Bir LoggerFactory örnek bağımlılık ekleme yoluyla çözümlenebilir veya kullanılarak LoggerFactory.Createoluşturulabilir. Günlüğü yapılandırma örnekleri için bkz . .NET üzerinde gRPC'de günlüğe kaydetme ve tanılama.
MaxSendMessageSize null İstemciden gönderilebilen bayt cinsinden en büyük ileti boyutu. Yapılandırılan ileti boyutu üst sınırını aşan bir ileti göndermeye çalışmak bir özel durumla sonuçlanmıştır. olarak ayarlandığında nullileti boyutu sınırsızdır.
MaxReceiveMessageSize 4 MB İstemci tarafından alınabilecek bayt cinsinden ileti boyutu üst sınırı. İstemci bu sınırı aşan bir ileti alırsa, bir özel durum oluşturur. Bu değerin artırılması, istemcinin daha büyük iletiler almasına olanak tanır, ancak bellek tüketimini olumsuz etkileyebilir. olarak ayarlandığında nullileti boyutu sınırsızdır.
Credentials null Bir ChannelCredentials örnek. Kimlik bilgileri gRPC çağrılarına kimlik doğrulaması meta verileri eklemek için kullanılır.
CompressionProviders gzip İletileri sıkıştırmak ve açmak için kullanılan sıkıştırma sağlayıcıları koleksiyonu. Özel sıkıştırma sağlayıcıları oluşturulabilir ve koleksiyona eklenebilir. Varsayılan yapılandırılmış sağlayıcılar gzip sıkıştırmasını destekler.
ThrowOperationCanceledOnCancellation false olarak ayarlanırsa true, bir çağrı iptal edildiğinde veya son tarihi aşıldığında istemciler atar OperationCanceledException .
UnsafeUseInsecureChannelCallCredentials false olarak ayarlanırsatrueCallCredentials, güvenli olmayan bir kanal tarafından yapılan gRPC çağrılarına uygulanır. Güvenli olmayan bir bağlantı üzerinden kimlik doğrulama üst bilgileri göndermenin güvenlik açısından etkileri vardır ve üretim ortamlarında yapılmamalıdır.
MaxRetryAttempts 5 Yeniden deneme sayısı üst sınırı. Bu değer, hizmet yapılandırmasında belirtilen tüm yeniden deneme ve riskten korunma denemesi değerlerini sınırlar. Bu değerin tek başına ayarlanması yeniden denemeleri etkinleştirmez. Yeniden denemeler, kullanılarak ServiceConfigyapilebilen hizmet yapılandırmasında etkinleştirilir. Bir null değer, en fazla yeniden deneme denemesi sınırını kaldırır. Yeniden denemeler hakkında daha fazla bilgi için bkz . gRPC yeniden denemeleriyle geçici hata işleme.
MaxRetryBufferSize 16 MB Çağrıları yeniden denerken veya bu durumdan yararlanırken gönderilen iletileri depolamak için kullanılabilecek bayt cinsinden en büyük arabellek boyutu. Arabellek sınırı aşılırsa, daha fazla yeniden deneme girişimi yapılmaz ve tüm risk azaltma çağrıları iptal edilir. Bu sınır, kanal kullanılarak yapılan tüm çağrılara uygulanır. Bir null değer, yeniden deneme arabellek boyutu üst sınırını kaldırır.
MaxRetryBufferPerCallSize 1 MB Çağrıları yeniden denerken veya bu durumdan yararlanırken gönderilen iletileri depolamak için kullanılabilecek bayt cinsinden en büyük arabellek boyutu. Arabellek sınırı aşılırsa, daha fazla yeniden deneme girişimi yapılmaz ve tüm risk azaltma çağrıları iptal edilir. Bu sınır bir çağrıya uygulanır. Bir null değer, çağrı başına en fazla yeniden deneme arabelleği boyut sınırını kaldırır.
ServiceConfig null gRPC kanalı için hizmet yapılandırması. Bir hizmet yapılandırması, gRPC yeniden denemelerini yapılandırmak için kullanılabilir.

Aşağıdaki kod:

  • Kanalda ileti gönderme ve alma boyutu üst sınırını ayarlar.
  • bir istemci oluşturur.
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);
}

İstemci kesme yollarının ile GrpcChannelOptionsyapılandırılmadığını unutmayın. Bunun yerine, istemci kesme cihazları bir kanal ile uzantı yöntemi kullanılarak Intercept yapılandırılır. Bu uzantı yöntemi ad alanındadır Grpc.Core.Interceptors .

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);
}

System.Net işleyici seçenekleri

Grpc.Net.Client , HTTP isteklerinde bulunmak için adresinden HttpMessageHandler türetilen bir HTTP aktarım kullanır. Her işleyici, HTTP isteklerinin nasıl yapıldığına yönelik ek seçenekler sunar.

İşleyici bir kanalda yapılandırılır ve ayarıyla GrpcChannelOptions.HttpHandlergeçersiz kılınabilir. .NET Core 3 ve .NET 5 veya üzeri varsayılan olarak kullanır SocketsHttpHandler . .NET Framework'te gRPC istemci uygulamaları WinHttpHandler'ı yapılandırmalıdır.

Farklı işleyiciler ve yapılandırma seçenekleri hakkında daha fazla bilgi için bkz:

Ek kaynaklar