gRPC dla konfiguracji platformy .NET
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Konfigurowanie opcji usług
Usługi gRPC są konfigurowane za pomocą AddGrpc
polecenia w systemie Startup.cs
. Opcje konfiguracji znajdują się w pakiecie Grpc.AspNetCore.Server
.
W poniższej tabeli opisano opcje konfigurowania usług gRPC:
Opcja | Wartość domyślna | opis |
---|---|---|
MaxSendMessageSize |
null |
Maksymalny rozmiar komunikatu w bajtach, które można wysłać z serwera. Próba wysłania komunikatu, który przekracza skonfigurowany maksymalny rozmiar komunikatu, powoduje wyjątek. W przypadku ustawienia wartości null rozmiar komunikatu jest nieograniczony. |
MaxReceiveMessageSize |
4 MB | Maksymalny rozmiar komunikatu w bajtach, które mogą być odbierane przez serwer. Jeśli serwer otrzyma komunikat, który przekracza ten limit, zgłasza wyjątek. Zwiększenie tej wartości umożliwia serwerowi odbieranie większych komunikatów, ale może negatywnie wpłynąć na zużycie pamięci. W przypadku ustawienia wartości null rozmiar komunikatu jest nieograniczony. |
EnableDetailedErrors |
false |
Jeśli true , szczegółowe komunikaty wyjątków są zwracane do klientów, gdy wyjątek jest zgłaszany w metodzie usługi. Wartość domyślna to false . Ustawienie EnableDetailedErrors na wartość true może wyciekać poufnych informacji. |
CompressionProviders |
gzip | Kolekcja dostawców kompresji używanych do kompresowania i dekompresowania komunikatów. Niestandardowych dostawców kompresji można tworzyć i dodawać do kolekcji. Domyślni skonfigurowani dostawcy obsługują kompresję gzip . |
ResponseCompressionAlgorithm |
null |
Algorytm kompresji używany do kompresowania komunikatów wysyłanych z serwera. Algorytm musi być zgodny z dostawcą kompresji w programie CompressionProviders . Aby algorytm kompresował odpowiedź, klient musi wskazać, że obsługuje algorytm, wysyłając go w nagłówku grpc-accept-encoding . |
ResponseCompressionLevel |
null |
Poziom kompresji używany do kompresowania komunikatów wysyłanych z serwera. |
Interceptors |
Brak | Kolekcja przechwytujących, które są uruchamiane z każdym wywołaniem gRPC. Przechwytniki są uruchamiane w kolejności, w której są zarejestrowane. Globalnie skonfigurowane przechwytniki są uruchamiane przed przechwytownikami skonfigurowanymi dla jednej usługi. Przechwytuje domyślnie okres istnienia poszczególnych żądań. Konstruktor przechwytywania jest wywoływany, a parametry są rozpoznawane z iniekcji zależności (DI). Typ przechwytywania można również zarejestrować w di, aby zastąpić sposób jego tworzenia i okresu istnienia. Przechwytuje oferują podobne funkcje w porównaniu z oprogramowaniem pośredniczącym ASP.NET Core. Aby uzyskać więcej informacji, zobacz gRPC Interceptors vs. Middleware. |
IgnoreUnknownServices |
false |
W przypadku true metody wywołania nieznanych usług i metod nie zwracają stanu UNIMPLEMENTED , a żądanie przekazuje do następnego zarejestrowanego oprogramowania pośredniczącego w ASP.NET Core. |
Opcje można skonfigurować dla wszystkich usług, udostępniając pełnomocnik opcji do wywołania AddGrpc
w pliku 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
});
}
Opcje pojedynczej usługi zastępują opcje globalne dostępne w programie AddGrpc
i można je skonfigurować przy użyciu polecenia 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
});
}
Przechwytniki usług mają domyślnie okres istnienia poszczególnych żądań. Zarejestrowanie typu przechwytywania za pomocą di zastępuje sposób tworzenia przechwytywania i jego okresu istnienia.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.Interceptors.Add<LoggingInterceptor>();
});
services.AddSingleton<LoggingInterceptor>();
}
opcje serwera ASP.NET Core
Grpc.AspNetCore.Server
jest hostowany przez serwer internetowy platformy ASP.NET Core. Istnieje wiele opcji dla serwerów ASP.NET Core, w tym Kestrelusług IIS i HTTP.sys. Każdy serwer oferuje dodatkowe opcje obsługi żądań HTTP.
Serwer używany przez aplikację ASP.NET Core jest skonfigurowany w kodzie uruchamiania aplikacji. Domyślnym serwerem jest Kestrel.
Aby uzyskać więcej informacji na temat różnych serwerów i ich opcji konfiguracji, zobacz:
- Kestrel serwer internetowy w programie ASP.NET Core
- Implementacja serwera internetowego HTTP.sys w środowisku ASP.NET Core
- Hostowanie aplikacji ASP.NET Core w systemie Windows przy użyciu usług IIS
Konfigurowanie opcji klienta
Konfiguracja klienta gRPC jest ustawiona na .GrpcChannelOptions
Opcje konfiguracji znajdują się w pakiecie Grpc.Net.Client
.
W poniższej tabeli opisano opcje konfigurowania kanałów gRPC:
Opcja | Wartość domyślna | opis |
---|---|---|
HttpHandler |
Nowe wystąpienie | Używane HttpMessageHandler do tworzenia wywołań gRPC. Klienta można ustawić tak, aby skonfigurować niestandardowe HttpClientHandler lub dodać dodatkowe procedury obsługi do potoku HTTP dla wywołań gRPC. Jeśli nie HttpMessageHandler zostanie określony, dla kanału zostanie utworzone nowe HttpClientHandler wystąpienie z automatycznym usuwaniem. |
HttpClient |
null |
Używane HttpClient do tworzenia wywołań gRPC. To ustawienie jest alternatywą dla HttpHandler elementu . |
DisposeHttpClient |
false |
Jeśli jest ustawiona true wartość i HttpClient HttpMessageHandler lub jest określona, element HttpHandler lub HttpClient jest usuwany odpowiednio, gdy GrpcChannel obiekt jest usuwany. |
LoggerFactory |
null |
Element LoggerFactory używany przez klienta do rejestrowania informacji o wywołaniach gRPC. Wystąpienie LoggerFactory można rozpoznać z iniekcji zależności lub utworzone przy użyciu polecenia LoggerFactory.Create . Przykłady konfigurowania rejestrowania można znaleźć w temacie Rejestrowanie i diagnostyka w usłudze gRPC na platformie .NET. |
MaxSendMessageSize |
null |
Maksymalny rozmiar komunikatu w bajtach, które można wysłać z klienta. Próba wysłania komunikatu, który przekracza skonfigurowany maksymalny rozmiar komunikatu, powoduje wyjątek. W przypadku ustawienia wartości null rozmiar komunikatu jest nieograniczony. |
MaxReceiveMessageSize |
4 MB | Maksymalny rozmiar komunikatu w bajtach, które mogą być odbierane przez klienta. Jeśli klient otrzyma komunikat, który przekracza ten limit, zgłasza wyjątek. Zwiększenie tej wartości umożliwia klientowi odbieranie większych komunikatów, ale może negatywnie wpłynąć na zużycie pamięci. W przypadku ustawienia wartości null rozmiar komunikatu jest nieograniczony. |
Credentials |
null |
ChannelCredentials Wystąpienie. Poświadczenia służą do dodawania metadanych uwierzytelniania do wywołań gRPC. |
CompressionProviders |
gzip | Kolekcja dostawców kompresji używanych do kompresowania i dekompresowania komunikatów. Niestandardowych dostawców kompresji można tworzyć i dodawać do kolekcji. Domyślni skonfigurowani dostawcy obsługują kompresję gzip . |
ThrowOperationCanceledOnCancellation |
false |
Jeśli ustawiono wartość true , klienci zgłaszają OperationCanceledException , gdy wywołanie zostanie anulowane lub jego termin zostanie przekroczony. |
UnsafeUseInsecureChannelCallCredentials |
false |
Jeśli ustawiono true wartość , CallCredentials są stosowane do wywołań gRPC wykonanych przez niezabezpieczony kanał. Wysyłanie nagłówków uwierzytelniania za pośrednictwem niezabezpieczonego połączenia ma wpływ na bezpieczeństwo i nie powinno być wykonywane w środowiskach produkcyjnych. |
MaxRetryAttempts |
5 | Maksymalna liczba ponownych prób. Ta wartość ogranicza wszelkie wartości ponawiania próby i zabezpieczenia określone w konfiguracji usługi. Ustawienie tej wartości nie powoduje włączenia ponownych prób. Ponowne próby są włączone w konfiguracji usługi, którą można wykonać przy użyciu polecenia ServiceConfig . Wartość null usuwa maksymalny limit ponownych prób. Aby uzyskać więcej informacji na temat ponownych prób, zobacz Obsługa błędów przejściowych przy użyciu ponownych prób gRPC. |
MaxRetryBufferSize |
16 MB | Maksymalny rozmiar buforu w bajtach, który może służyć do przechowywania wysłanych komunikatów podczas ponawiania próby lub zabezpieczania wywołań. Jeśli limit buforu zostanie przekroczony, nie zostaną wykonane kolejne próby ponawiania prób i wszystkie wywołania zabezpieczające, ale jeden zostanie anulowany. Ten limit jest stosowany we wszystkich wywołaniach wykonanych przy użyciu kanału. Wartość null usuwa maksymalny limit rozmiaru buforu ponawiania prób. |
MaxRetryBufferPerCallSize |
1 MB | Maksymalny rozmiar buforu w bajtach, który może służyć do przechowywania wysłanych komunikatów podczas ponawiania próby lub zabezpieczania wywołań. Jeśli limit buforu zostanie przekroczony, nie zostaną wykonane kolejne próby ponawiania prób i wszystkie wywołania zabezpieczające, ale jeden zostanie anulowany. Ten limit jest stosowany do jednego wywołania. Wartość null usuwa maksymalny limit rozmiaru buforu ponawiania na wywołanie. |
ServiceConfig |
null |
Konfiguracja usługi dla kanału gRPC. Konfiguracja usługi może służyć do konfigurowania ponownych prób usługi gRPC. |
Następujący kod powoduje:
- Ustawia maksymalny rozmiar komunikatu wysyłania i odbierania w kanale.
- Tworzy klienta.
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);
}
Należy pamiętać, że przechwytywanie klientów nie jest skonfigurowane za pomocą polecenia GrpcChannelOptions
. Zamiast tego przechwytatory klienta są konfigurowane przy użyciu Intercept
metody rozszerzenia z kanałem. Ta metoda rozszerzenia znajduje się w Grpc.Core.Interceptors
przestrzeni nazw.
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);
}
Opcje programu obsługi System.Net
Grpc.Net.Client
używa transportu HTTP pochodzącego z HttpMessageHandler
, aby wysyłać żądania HTTP. Każda procedura obsługi oferuje dodatkowe opcje dotyczące sposobu wykonywania żądań HTTP.
Procedura obsługi jest skonfigurowana w kanale i może zostać zastąpiona przez ustawienie .GrpcChannelOptions.HttpHandler
Programy .NET Core 3 i .NET 5 lub nowsze są domyślnie używane SocketsHttpHandler . Aplikacje klienckie gRPC na platformie .NET Framework powinny skonfigurować program WinHttpHandler.
Aby uzyskać więcej informacji o różnych programach obsługi i ich opcjach konfiguracji, zobacz: