.NET yapılandırması için gRPC
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.
Hizmet seçeneklerini yapılandırma
gRPC hizmetleri içinde Startup.cs
ile 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 null ileti 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 null ileti 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 CompressionProviders eş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 true hizmetlere 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.ConfigureServices
iç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:
- Kestrel ASP.NET Core'da web sunucusu
- ASP.NET Core'da HTTP.sys web sunucusu uygulaması
- IIS ile Windows'da ASP.NET Core'u barındırma
İstemci seçeneklerini yapılandırma
gRPC istemci yapılandırması üzerinde GrpcChannelOptions
ayarlanı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 HttpHandler bir alternatiftir. |
DisposeHttpClient |
false |
olarak ayarlanırsa true ve veya HttpMessageHandler HttpClient belirtilirse, HttpHandler atıldığında GrpcChannel sırasıyla veya HttpClient atı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.Create oluş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 null ileti 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 null ileti 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ırsatrue CallCredentials , 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 ServiceConfig yapilebilen 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 GrpcChannelOptions
yapı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.HttpHandler
geç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
ASP.NET Core