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

Hizmet seçeneklerini yapılandırma

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

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

Seçenek Varsayılan değer Description
MaxSendMessageSize null Sunucudan gönderebilirsiniz bayt cinsinden en büyük ileti boyutu. Yapılandırılan en büyük ileti boyutunu aşan bir ileti gönderme girişimi bir özel durumla sonuç verir. olarak null ayarlanırsa ileti boyutu sınırsızdır.
MaxReceiveMessageSize 4 MB Sunucu tarafından alınarak alınan bayt cinsinden en büyük ileti boyutu. 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 alasını sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir. olarak null ayarlanırsa ileti boyutu sınırsızdır.
EnableDetailedErrors false ise, true ayrıntılı özel durum iletileri bir hizmet yönteminde bir özel durum thrown olduğunda istemcilere döndürülür. Varsayılan değer: false. olarak EnableDetailedErrors ayarı hassas bilgileri true sızdırabilirsiniz.
CompressionProviders Gzip İletileri sıkıştırmak ve sıkıştırmasını sıkıştırmak için kullanılan bir 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ılan 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, 'de bir sıkıştırma sağlayıcısıyla CompressionProviders eşleşmeli. Algoritmanın bir yanıtı sıkıştırması için istemcinin algoritmayı grpc-accept-encoding üst bilgisinde göndererek algoritmayı desteklediğini belirterek belirtebilirsiniz.
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ıran bir kesme noktası koleksiyonu. Kesme noktası, kaydedildikleri sırayla çalıştır. Genel olarak yapılandırılan kesmeciler, tek bir hizmet için yapılandırılan kesme noktası olmadan önce çalıştırıldığında. gRPC kesme noktası hakkında daha fazla bilgi için bkz. gRPC Interceptors ve Ara Yazılım.
IgnoreUnknownServices false , bilinmeyen hizmetlere ve yöntemlere yapılan çağrılar UYGULANMAMIŞ bir durum getiremese ve istek, true ASP.NET Core'de sonraki kayıtlı ara yazılıma geçer.

Seçenekler, içinde çağrısına bir seçenek temsilcisi sağlayarak tüm hizmetler için AddGrpc yalıtabilirsiniz: 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
    });
}

Tek bir hizmetin seçenekleri içinde sağlanan genel seçenekleri geçersiz kılar AddGrpc ve kullanılarak yalıtabilirsiniz: 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
    });
}

İstemci seçeneklerini yapılandırma

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

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

Seçenek Varsayılan değer Description
HttpHandler Yeni örnek HttpMessageHandlergRPC çağrıları yapmak için kullanılır. Bir istemci, özel bir yapılandırma yapmak veya HttpClientHandler gRPC çağrıları için HTTP işlem hattına ek işleyiciler eklemek üzere ayarlanmış olabilir. HttpMessageHandlerBelirtilmezse, kanal için HttpClientHandler otomatik atma ile yeni bir örnek oluşturulur.
HttpClient null HttpClientgRPC çağrıları yapmak için kullanılır. Bu ayar HttpHandler alternatiftir.
DisposeHttpClient false ve olarak true ayarlanırsa HttpMessageHandler veya HttpClient belirtilirse, sırasıyla veya , HttpHandler HttpClient GrpcChannel atılmasında atılması gerekir.
LoggerFactory null İstemci LoggerFactory tarafından gRPC çağrıları hakkında bilgileri günlüğe almak için kullanılan. Bir LoggerFactory örnek bağımlılık eklemeden çözülebilir veya kullanılarak LoggerFactory.Create oluşturulabilir. Günlüğe kaydetmeyi yapılandırma örnekleri için bkz. .NET üzerinde gRPC 'de günlüğe kaydetme ve tanılama .
MaxSendMessageSize null İstemciden gönder gönderilen bayt cinsinden en büyük ileti boyutu. Yapılandırılan en büyük ileti boyutunu aşan bir ileti gönderme girişimi bir özel durumla sonuç verir. olarak null ayarlanırsa ileti boyutu sınırsızdır.
MaxReceiveMessageSize 4 MB İstemci tarafından alınarak alınan bayt cinsinden en büyük ileti boyutu. İ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 alasını sağlar, ancak bellek tüketimini olumsuz yönde etkileyene neden olabilir. olarak null ayarlanırsa ileti boyutu sınırsızdır.
Credentials null Bir ChannelCredentials örnek. Kimlik bilgileri, gRPC çağrılara kimlik doğrulama meta verileri eklemek için kullanılır.
CompressionProviders Gzip İletileri sıkıştırmak ve sıkıştırmasını sıkıştırmak için kullanılan bir 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ılan sağlayıcılar gzip sıkıştırmasını destekler.
ThrowOperationCanceledOnCancellation false olarak true ayarlanırsa, istemciler OperationCanceledException bir çağrı iptal edilirken veya son tarihi aşılırken atar.
MaxRetryAttempts 5 En yüksek yeniden deneme deneme sayısı. Bu değer, hizmet yapılandırmasında belirtilen tüm yeniden deneme ve hedging denemesi değerlerini sınırlar. Bu değerin tek başına ayar olması yeniden denemeleri etkinleştirmez. Yeniden denemeler, kullanılarak yaplanlan hizmet yapılandırmasında ServiceConfig 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 16mb Çağrılar yeniden denenme veya köprüleme işlemiyle gönderilen iletileri depolamak için kullanılan bayt cinsinden en büyük arabellek boyutu. Arabellek sınırı aşılırsa başka yeniden deneme denemesi olmaz ve tüm köprüleme çağrıları iptal edilir. Bu sınır, kanal kullanılarak yapılan tüm çağrılara uygulanır. Değer, null yeniden deneme arabelleği boyut üst sınırını kaldırır.
MaxRetryBufferPerCallSize 1 MB Çağrılar yeniden denenme veya köprüleme işlemiyle gönderilen iletileri depolamak için kullanılan bayt cinsinden en büyük arabellek boyutu. Arabellek sınırı aşılırsa başka yeniden deneme denemesi olmaz ve tüm köprüleme çağrıları iptal edilir. Bu sınır tek bir çağrıya uygulanır. Bir null değer, çağrı başına en fazla yeniden deneme arabellek boyutu sınırını kaldırır.
ServiceConfig null gRPC kanalı için hizmet yapılandırması. gRPCyeniden denemelerini yapılandırmak için bir hizmet yapılandırması kullanılabilir.

Aşağıdaki kod:

  • Kanalda en yüksek gönderme ve alma iletisi boyutunu 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);
}

Uyarı

ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .

Ek kaynaklar