Delen via


gRPC voor .NET-configuratie

Note

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-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 9-versie van dit artikel voor de huidige release.

Important

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-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 Default Value 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. Instelling EnableDetailedErrors om true gevoelige informatie te 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 algoritme het algoritme ondersteunt door het te verzenden in de header grpc-accept-encoding .
ResponseCompressionLevel null Het comprimeerniveau dat wordt gebruikt voor het comprimeren van berichten die vanaf de server worden verzonden.
Interceptors None Een verzameling interceptors die worden uitgevoerd met elke gRPC-aanroep. 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 per aanvraag. De interceptorconstructor wordt aangeroepen en parameters worden omgezet 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 trueaanroepen naar onbekende services en methoden geen UNIMPLEMENTED-status retourneren en de aanvraag doorgeeft aan de volgende geregistreerde middleware in ASP.NET Core.

Opties kunnen worden geconfigureerd voor alle services door een optie te bieden die delegeren aan de AddGrpc aanroep 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
    });
}

Opties voor één service overschrijven de algemene opties die worden AddGrpc geleverd en kunnen worden geconfigureerd met behulp van 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 per aanvraag. Als u het snijpunttype registreert bij DI, wordt overschreven hoe een interceptor wordt gemaakt en de levensduur ervan.

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 Default Value Description
HttpHandler New instance De HttpMessageHandler gebruikte 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 gebruikte 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, wordt de HttpHandler of HttpClientrespectievelijke, wordt verwijderd wanneer de GrpcChannel verwijdering wordt uitgevoerd.
LoggerFactory null De LoggerFactory client gebruikt voor het vastleggen van informatie over gRPC-aanroepen. 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 dit is ingesteld trueop, worden clients gegooid 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 nieuwe pogingen en hedgingpogingen die zijn opgegeven in de serviceconfiguratie. Als u deze waarde alleen instelt, worden nieuwe pogingen niet ingeschakeld. Nieuwe pogingen worden ingeschakeld in de serviceconfiguratie, die kan worden uitgevoerd met behulp van ServiceConfig. Met een null waarde wordt de maximumlimiet voor nieuwe pogingen verwijderd. Zie Tijdelijke foutafhandeling met gRPC-nieuwe pogingen voor meer informatie over nieuwe pogingen.
MaxRetryBufferSize 16 MB De maximale buffergrootte in bytes die kunnen worden gebruikt om verzonden berichten op te slaan bij het opnieuw proberen of hedgingen van aanroepen. Als de bufferlimiet wordt overschreden, worden er geen nieuwe pogingen meer gedaan en worden alle hedging-oproepen geannuleerd, maar één wordt geannuleerd. 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 hedgingen van aanroepen. Als de bufferlimiet wordt overschreden, worden er geen nieuwe pogingen meer gedaan en worden alle hedging-oproepen geannuleerd, maar één wordt geannuleerd. 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 maakt u een client.
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 overschreven door de instelling in te stellen GrpcChannelOptions.HttpHandler. .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:

Additional resources