gRPC dla konfiguracji platformy .NET

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 nullrozmiar 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 nullrozmiar 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 None 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 truemetody 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:

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 HttpHandlerelementu .
DisposeHttpClient false Jeśli jest ustawiona true wartość i HttpClientHttpMessageHandler lub jest określona, element HttpHandler lub HttpClientjest 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 nullrozmiar 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 nullrozmiar 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 truewartość , 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:

Dodatkowe zasoby