gRPC voor .NET-configuratie

Note

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 10-versie van dit artikel voor de huidige release.

Warning

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 10-versie van dit artikel voor de huidige release.

Servicesopties configureren

gRPC-services worden geconfigureerd met AddGrpc in Startup.cs. Configuratieopties bevinden zich in het Grpc.AspNetCore.Server pakket.

In de volgende tabel worden opties beschreven voor het configureren van gRPC-services:

Option Standaardwaarde Description
MaxSendMessageSize null De maximale berichtgrootte in bytes die vanaf de server kunnen worden verzonden. Als u een bericht probeert te verzenden dat groter is dan de geconfigureerde maximale berichtgrootte, resulteert dit in een uitzondering. Wanneer dit is ingesteld null, is de berichtgrootte onbeperkt.
MaxReceiveMessageSize 4 MB De maximale berichtgrootte in bytes die door de server kunnen worden ontvangen. Als de server een bericht ontvangt dat deze limiet overschrijdt, wordt er een uitzondering gegenereerd. Door deze waarde te verhogen, kan de server grotere berichten ontvangen, maar kan dit een negatieve invloed hebben op het geheugenverbruik. Wanneer dit is ingesteld null, is de berichtgrootte onbeperkt.
EnableDetailedErrors false Als truegedetailleerde uitzonderingsberichten naar clients worden geretourneerd wanneer er een uitzondering wordt gegenereerd in een servicemethode. De standaardwaarde is false. Het instellen van EnableDetailedErrors naar true kan gevoelige informatie lekken.
CompressionProviders gzip Een verzameling compressieproviders die worden gebruikt voor het comprimeren en decomprimeren van berichten. Aangepaste compressieproviders kunnen worden gemaakt en toegevoegd aan de verzameling. De standaard geconfigureerde providers ondersteunen gzip-compressie .
ResponseCompressionAlgorithm null Het compressie-algoritme dat wordt gebruikt voor het comprimeren van berichten die vanaf de server worden verzonden. Het algoritme moet overeenkomen met een compressieprovider in CompressionProviders. Om een antwoord te comprimeren, moet de client aangeven dat het het algoritme ondersteunt door het in de grpc-accept-encoding header te verzenden.
ResponseCompressionLevel null Het comprimeerniveau dat wordt gebruikt voor het comprimeren van berichten die vanaf de server worden verzonden.
Interceptors None Een verzameling interceptoren die bij elke gRPC-aanroep worden uitgevoerd. Interceptors worden uitgevoerd in de volgorde waarin ze zijn geregistreerd. Globaal geconfigureerde interceptors worden uitgevoerd voordat interceptors worden geconfigureerd voor één service.

Interceptors hebben standaard een levensduur die per aanvraag geldt. De constructor van de interceptor wordt aangeroepen en parameters worden opgelost vanuit afhankelijkheidsinjectie (DI). Een snijpunttype kan ook worden geregistreerd bij DI om te overschrijven hoe het wordt gemaakt en de levensduur ervan.

Interceptors bieden vergelijkbare functionaliteiten in vergelijking met ASP.NET Core middleware. Zie gRPC Interceptors versus middleware voor meer informatie.
IgnoreUnknownServices false Als true het geval is, retourneren oproepen naar onbekende services en methoden geen UNIMPLEMENTED-status, en wordt de aanvraag doorgegeven aan de volgende geregistreerde middleware in ASP.NET Core.

Opties kunnen voor alle services worden geconfigureerd door een options delegate aan de AddGrpc aanroep in Startup.ConfigureServices te bieden.

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

Opties voor één service overschrijven de algemene opties in AddGrpc en kunnen worden geconfigureerd door 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
    });
}

Service-interceptors hebben standaard een levensduur die bij elke aanvraag begint en eindigt. Wanneer u het interceptortype bij DI registreert, wordt overschreven hoe een interceptor wordt gecreëerd en wat de levensduur ervan is.

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

ASP.NET Core-serveropties

Grpc.AspNetCore.Server wordt gehost door een ASP.NET Core-webserver. Er zijn een aantal opties voor ASP.NET Core-servers, waaronder KestrelIIS en HTTP.sys. Elke server biedt extra opties voor de wijze waarop HTTP-aanvragen worden verwerkt.

De server die wordt gebruikt door een ASP.NET Core-app is geconfigureerd in de opstartcode van de app. De standaardserver is Kestrel.

Zie voor meer informatie over de verschillende servers en hun configuratieopties:

Clientopties configureren

gRPC-clientconfiguratie is ingesteld op GrpcChannelOptions. Configuratieopties bevinden zich in het Grpc.Net.Client pakket.

In de volgende tabel worden opties beschreven voor het configureren van gRPC-kanalen:

Option Standaardwaarde Description
HttpHandler Nieuw exemplaar De HttpMessageHandler gebruikt om gRPC-aanroepen te maken. Een client kan worden ingesteld om een aangepaste HttpClientHandler configuratie te configureren of extra handlers toe te voegen aan de HTTP-pijplijn voor gRPC-aanroepen. Als er geen HttpMessageHandler is opgegeven, wordt er een nieuwe HttpClientHandler instantie gemaakt voor het kanaal met automatische verwijdering.
HttpClient null De HttpClient gebruikt om gRPC-aanroepen te maken. Deze instelling is een alternatief voor HttpHandler.
DisposeHttpClient false Als dit is ingesteld op true en een HttpMessageHandler of HttpClient is opgegeven, dan wordt respectievelijk de HttpHandler of HttpClient verwijderd wanneer de GrpcChannel wordt verwijderd.
LoggerFactory null De LoggerFactory wordt door de client gebruikt om informatie over gRPC-aanroepen vast te leggen. Een LoggerFactory exemplaar kan worden opgelost op basis van afhankelijkheidsinjectie of gemaakt met behulp van LoggerFactory.Create. Zie Logboekregistratie en diagnostische gegevens in gRPC op .NET voor voorbeelden van het configureren van logboekregistratie.
MaxSendMessageSize null De maximale berichtgrootte in bytes die kunnen worden verzonden vanaf de client. Als u een bericht probeert te verzenden dat groter is dan de geconfigureerde maximale berichtgrootte, resulteert dit in een uitzondering. Wanneer dit is ingesteld null, is de berichtgrootte onbeperkt.
MaxReceiveMessageSize 4 MB De maximale berichtgrootte in bytes die door de client kunnen worden ontvangen. Als de client een bericht ontvangt dat deze limiet overschrijdt, wordt er een uitzondering gegenereerd. Door deze waarde te verhogen, kan de client grotere berichten ontvangen, maar kan dit een negatieve invloed hebben op het geheugenverbruik. Wanneer dit is ingesteld null, is de berichtgrootte onbeperkt.
Credentials null Een ChannelCredentials exemplaar. Referenties worden gebruikt om verificatiemetagegevens toe te voegen aan gRPC-aanroepen.
CompressionProviders gzip Een verzameling compressieproviders die worden gebruikt voor het comprimeren en decomprimeren van berichten. Aangepaste compressieproviders kunnen worden gemaakt en toegevoegd aan de verzameling. De standaard geconfigureerde providers ondersteunen gzip-compressie .
ThrowOperationCanceledOnCancellation false Als true is ingesteld, wordt een uitzondering geworpen in de clients OperationCanceledException wanneer een oproep wordt geannuleerd of de deadline wordt overschreden.
UnsafeUseInsecureChannelCallCredentials false Indien ingesteld op true, CallCredentials worden toegepast op gRPC-aanroepen die worden gedaan door een onveilig kanaal. Het verzenden van verificatieheaders via een onveilige verbinding heeft gevolgen voor de beveiliging en moet niet worden uitgevoerd in productieomgevingen.
MaxRetryAttempts 5 Het maximum aantal nieuwe pogingen. Deze waarde beperkt alle waarden voor pogingen en hedging die zijn opgegeven in de serviceconfiguratie. Als u deze waarde alleen instelt, worden nieuwe pogingen niet mogelijk gemaakt. Nieuwe pogingen worden ingeschakeld in de serviceconfiguratie, dat kan worden gedaan met ServiceConfig. Met een null waarde wordt de maximumlimiet voor nieuwe pogingen verwijderd. Zie Tijdelijke foutafhandeling met gRPC-retries voor meer informatie over het opnieuw proberen.
MaxRetryBufferSize 16 MB De maximale buffergrootte in bytes die kunnen worden gebruikt om verzonden berichten op te slaan bij het opnieuw proberen of hedgen van oproepen. Als de bufferlimiet wordt overschreden, worden er geen nieuwe pogingen meer gedaan en worden alle hedging-oproepen geannuleerd, behalve één. Deze limiet wordt toegepast op alle aanroepen die via het kanaal worden gedaan. Met een null waarde wordt de maximale limiet voor buffergrootte voor opnieuw proberen verwijderd.
MaxRetryBufferPerCallSize 1 MB De maximale buffergrootte in bytes die kunnen worden gebruikt om verzonden berichten op te slaan bij het opnieuw proberen of hedgen van oproepen. Als de bufferlimiet wordt overschreden, worden er geen nieuwe pogingen meer gedaan en worden alle hedging-oproepen geannuleerd, behalve één. Deze limiet wordt toegepast op één aanroep. Met een null waarde wordt de maximale limiet voor buffergrootte voor opnieuw proberen per aanroep verwijderd.
ServiceConfig null De serviceconfiguratie voor een gRPC-kanaal. Een serviceconfiguratie kan worden gebruikt voor het configureren van nieuwe pogingen van gRPC.

De volgende code:

  • Hiermee stelt u de maximale grootte van het verzenden en ontvangen van berichten op het kanaal in.
  • Hiermee wordt een client aangemaakt.
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);
}

Houd er rekening mee dat client interceptors niet zijn geconfigureerd met GrpcChannelOptions. In plaats daarvan worden client interceptors geconfigureerd met behulp van de Intercept extensiemethode met een kanaal. Deze extensiemethode bevindt zich in de Grpc.Core.Interceptors naamruimte.

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 handleropties

Grpc.Net.Client maakt gebruik van een HTTP-transport afgeleid van HttpMessageHandler om HTTP-aanvragen te maken. Elke handler biedt extra opties voor de manier waarop HTTP-aanvragen worden gedaan.

De handler is geconfigureerd op een kanaal en kan worden aangepast door GrpcChannelOptions.HttpHandler in te stellen. .NET Core 3 en .NET 5 of hoger worden standaard gebruikt SocketsHttpHandler . gRPC-client-apps op .NET Framework moeten WinHttpHandler configureren.

Zie voor meer informatie over de verschillende handlers en hun configuratieopties:

Aanvullende bronnen