Dela via


gRPC för .NET-konfiguration

Note

Det här är inte den senaste versionen av den här artikeln. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Warning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Important

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .

Konfigurera tjänstalternativ

gRPC-tjänster konfigureras med AddGrpc i Startup.cs. Konfigurationsalternativ finns i paketet Grpc.AspNetCore.Server .

I följande tabell beskrivs alternativ för att konfigurera gRPC-tjänster:

Option Default Value Description
MaxSendMessageSize null Den maximala meddelandestorleken i byte som kan skickas från servern. Försök att skicka ett meddelande som överskrider den konfigurerade maximala meddelandestorleken resulterar i ett undantag. När värdet nullär är meddelandestorleken obegränsad.
MaxReceiveMessageSize 4 MB Den maximala meddelandestorleken i byte som kan tas emot av servern. Om servern får ett meddelande som överskrider den här gränsen utlöser den ett undantag. Om du ökar det här värdet kan servern ta emot större meddelanden, men kan påverka minnesförbrukningen negativt. När värdet nullär är meddelandestorleken obegränsad.
EnableDetailedErrors false Om truereturneras detaljerade undantagsmeddelanden till klienter när ett undantag utlöses i en tjänstmetod. Standardvärdet är false. Inställningen EnableDetailedErrors till true kan läcka känslig information.
CompressionProviders gzip En samling komprimeringsprovidrar som används för att komprimera och dekomprimera meddelanden. Anpassade komprimeringsproviders kan skapas och läggas till i samlingen. Standardkonfigurerade leverantörer stöder gzip-komprimering .
ResponseCompressionAlgorithm null Komprimeringsalgoritmen som används för att komprimera meddelanden som skickas från servern. Algoritmen måste matcha en komprimeringsprovider i CompressionProviders. För att algoritmen ska komprimera ett svar måste klienten ange att den stöder algoritmen genom att skicka den i sidhuvudet grpc-accept-encoding .
ResponseCompressionLevel null Den komprimeringsnivå som används för att komprimera meddelanden som skickas från servern.
Interceptors None En samling interceptorer som körs med varje gRPC-anrop. Interceptorer körs i den ordning de registreras. Globalt konfigurerade interceptorer körs innan interceptorer konfigureras för en enda tjänst.

Interceptorer har en livslängd per begäran som standard. Konstruktorn för interceptor anropas och parametrar matchas från beroendeinmatning (DI). En skärningspunktstyp kan också registreras med DI för att åsidosätta hur den skapas och dess livslängd.

Interceptorer erbjuder liknande funktioner jämfört med ASP.NET Core-mellanprogram. Mer information finns i gRPC Interceptors vs. Middleware.
IgnoreUnknownServices false Om truereturnerar anrop till okända tjänster och metoder inte en UNIMPLEMENTED-status och begäran skickas till nästa registrerade mellanprogram i ASP.NET Core.

Alternativ kan konfigureras för alla tjänster genom att tillhandahålla ett alternativdelegat till anropet AddGrpc i 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
    });
}

Alternativ för en enskild tjänst åsidosätter de globala alternativ som anges i AddGrpc och kan konfigureras med hjälp av 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
    });
}

Tjänstavlyssnare har en livslängd per begäran som standard. Om du registrerar interceptor-typen med DI åsidosätts hur en interceptor skapas och dess livslängd.

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

ASP.NET Core-serveralternativ

Grpc.AspNetCore.Server hanteras av en ASP.NET Core-webbserver. Det finns ett antal alternativ för ASP.NET Core-servrar, inklusive Kestrel, IIS och HTTP.sys. Varje server erbjuder ytterligare alternativ för hur HTTP-begäranden hanteras.

Servern som används av en ASP.NET Core-app konfigureras i appens startkod. Standardservern är Kestrel.

Mer information om de olika servrarna och deras konfigurationsalternativ finns i:

Konfigurera klientalternativ

gRPC-klientkonfigurationen är inställd på GrpcChannelOptions. Konfigurationsalternativ finns i paketet Grpc.Net.Client .

I följande tabell beskrivs alternativ för att konfigurera gRPC-kanaler:

Option Default Value Description
HttpHandler New instance Används HttpMessageHandler för att göra gRPC-anrop. En klient kan ställas in för att konfigurera en anpassad HttpClientHandler eller lägga till ytterligare hanterare i HTTP-pipelinen för gRPC-anrop. Om nej HttpMessageHandler anges skapas en ny HttpClientHandler instans för kanalen med automatisk bortskaffande.
HttpClient null Används HttpClient för att göra gRPC-anrop. Den här inställningen är ett alternativ till HttpHandler.
DisposeHttpClient false Om anges till true och en HttpMessageHandler eller HttpClient anges, tas antingen HttpHandler eller HttpClient, respektive, bort när tas GrpcChannel bort.
LoggerFactory null Den LoggerFactory som används av klienten för att logga information om gRPC-anrop. En LoggerFactory instans kan lösas från beroendeinmatning eller skapas med hjälp av LoggerFactory.Create. Exempel på hur du konfigurerar loggning finns i Loggning och diagnostik i gRPC på .NET.
MaxSendMessageSize null Den maximala meddelandestorleken i byte som kan skickas från klienten. Försök att skicka ett meddelande som överskrider den konfigurerade maximala meddelandestorleken resulterar i ett undantag. När värdet nullär är meddelandestorleken obegränsad.
MaxReceiveMessageSize 4 MB Den maximala meddelandestorleken i byte som kan tas emot av klienten. Om klienten får ett meddelande som överskrider den här gränsen utlöser den ett undantag. Genom att öka det här värdet kan klienten ta emot större meddelanden, men kan påverka minnesförbrukningen negativt. När värdet nullär är meddelandestorleken obegränsad.
Credentials null En ChannelCredentials instans. Autentiseringsuppgifter används för att lägga till autentiseringsmetadata i gRPC-anrop.
CompressionProviders gzip En samling komprimeringsprovidrar som används för att komprimera och dekomprimera meddelanden. Anpassade komprimeringsproviders kan skapas och läggas till i samlingen. Standardkonfigurerade leverantörer stöder gzip-komprimering .
ThrowOperationCanceledOnCancellation false Om värdet är trueinställt på utlöss OperationCanceledException klienter när ett anrop avbryts eller dess tidsgräns överskrids.
UnsafeUseInsecureChannelCallCredentials false Om värdet trueär , CallCredentials tillämpas på gRPC-anrop som görs av en osäker kanal. Att skicka autentiseringshuvuden via en osäker anslutning har säkerhetskonsekvenser och bör inte göras i produktionsmiljöer.
MaxRetryAttempts 5 Maximalt antal återförsök. Det här värdet begränsar alla försöks- och säkringsförsöksvärden som anges i tjänstkonfigurationen. Om du anger enbart det här värdet aktiveras inte återförsök. Återförsök aktiveras i tjänstkonfigurationen, vilket kan göras med hjälp av ServiceConfig. Ett null värde tar bort gränsen för maximalt antal återförsök. Mer information om återförsök finns i Tillfälliga felhantering med gRPC-återförsök.
MaxRetryBufferSize 16 MB Den maximala buffertstorleken i byte som kan användas för att lagra skickade meddelanden vid återförsök eller säkring av anrop. Om buffertgränsen överskrids görs inga fler återförsök och alla säkringsanrop men ett avbryts. Den här gränsen tillämpas för alla anrop som görs med hjälp av kanalen. Ett null värde tar bort gränsen för maximal buffertstorlek för återförsök.
MaxRetryBufferPerCallSize 1 MB Den maximala buffertstorleken i byte som kan användas för att lagra skickade meddelanden vid återförsök eller säkring av anrop. Om buffertgränsen överskrids görs inga fler återförsök och alla säkringsanrop men ett avbryts. Den här gränsen tillämpas på ett anrop. Ett null värde tar bort gränsen för maximal buffertstorlek för återförsök per anrop.
ServiceConfig null Tjänstkonfigurationen för en gRPC-kanal. En tjänstkonfiguration kan användas för att konfigurera gRPC-återförsök.

Följande kod:

  • Anger den maximala storleken för skicka och ta emot meddelanden på kanalen.
  • Skapar en klient.
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);
}

Observera att klientavlyssnare inte har konfigurerats med GrpcChannelOptions. I stället konfigureras klientavlyssnare med hjälp av Intercept tilläggsmetoden med en kanal. Den här tilläggsmetoden finns i Grpc.Core.Interceptors namnområdet.

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-hanteringsalternativ

Grpc.Net.Client använder en HTTP-transport som härleds från HttpMessageHandler för att göra HTTP-begäranden. Varje hanterare erbjuder ytterligare alternativ för hur HTTP-begäranden görs.

Hanteraren är konfigurerad på en kanal och kan åsidosättas genom att ange GrpcChannelOptions.HttpHandler. .NET Core 3 och .NET 5 eller senare används SocketsHttpHandler som standard. gRPC-klientappar på .NET Framework bör konfigurera WinHttpHandler.

Mer information om de olika hanterarna och deras konfigurationsalternativ finns i:

Additional resources