gRPC pro konfiguraci .NET

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete ve verzi .NET 8 tohoto článku.

Konfigurace možností služeb

Služby gRPC jsou nakonfigurovány AddGrpc v Startup.cssystému . Možnosti konfigurace jsou v Grpc.AspNetCore.Server balíčku.

Následující tabulka popisuje možnosti konfigurace služeb gRPC:

Možnost Výchozí hodnota Popis
MaxSendMessageSize null Maximální velikost zprávy v bajtech, které lze odeslat ze serveru. Při pokusu o odeslání zprávy, která překračuje nakonfigurovanou maximální velikost zprávy, dojde k výjimce. Pokud je nastavená nullhodnota , velikost zprávy je neomezená.
MaxReceiveMessageSize 4 MB Maximální velikost zprávy v bajtech, které může server přijímat. Pokud server obdrží zprávu, která tento limit překročí, vyvolá výjimku. Zvýšení této hodnoty umožňuje serveru přijímat větší zprávy, ale může negativně ovlivnit spotřebu paměti. Pokud je nastavená nullhodnota , velikost zprávy je neomezená.
EnableDetailedErrors false Pokud truese klientům vrátí podrobné zprávy o výjimce při vyvolání výjimky v metodě služby. Výchozí hodnota je false. Nastavení EnableDetailedErrors pro true únik citlivých informací
CompressionProviders gzip Kolekce poskytovatelů komprese používaná ke komprimaci a dekomprimaci zpráv. Do kolekce je možné vytvořit a přidat vlastní zprostředkovatele komprese. Výchozí nakonfigurovaní zprostředkovatelé podporují kompresi gzip .
ResponseCompressionAlgorithm null Algoritmus komprese používaný ke komprimaci zpráv odeslaných ze serveru. Algoritmus musí odpovídat poskytovateli komprese v CompressionProviderssouboru . Aby algoritmus komprimovat odpověď, musí klient indikovat, že podporuje algoritmus odesláním do hlavičky grpc-accept-encoding .
ResponseCompressionLevel null Úroveň komprese použitá ke komprimaci zpráv odeslaných ze serveru.
Interceptors Nic Kolekce průsečíků, které se spouštějí s každým voláním gRPC. Průsečíky se spouštějí v pořadí, v jakém jsou zaregistrovány. Globálně nakonfigurované průsečíky se spouští před konfigurací průsečíků pro jednu službu.

Průsečíky mají ve výchozím nastavení životnost jednotlivých požadavků. Konstruktor průsečíku je volána a parametry jsou vyřešeny z injektáže závislostí (DI). Typ zachytávacího objektu lze také zaregistrovat pomocí DI a přepsat způsob jeho vytvoření a jeho životnost.

Průsečíky nabízejí podobné funkce v porovnání s middlewarem ASP.NET Core. Další informace naleznete v tématu gRPC Interceptors vs. Middleware.
IgnoreUnknownServices false Pokud truevolání neznámých služeb a metod nevrátí stav UNIMPLEMENTED a požadavek se předá do dalšího zaregistrovaného middlewaru v ASP.NET Core.

Možnosti lze nakonfigurovat pro všechny služby poskytnutím delegáta možností na AddGrpc hovor v 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
    });
}

Možnosti jedné služby přepíší globální možnosti uvedené v AddGrpc této službě a dají se nakonfigurovat pomocí 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
    });
}

Zachytávání služeb má ve výchozím nastavení životnost jednotlivých požadavků. Registrace typu zachytávání pomocí di přepisuje způsob vytvoření průsečíku a jeho životnost.

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

Možnosti serveru ASP.NET Core

Grpc.AspNetCore.Server hostuje webový server ASP.NET Core. Existuje řada možností pro servery ASP.NET Core, včetně Kestrel, SLUŽBY IIS a HTTP.sys. Každý server nabízí další možnosti obsluhy požadavků HTTP.

Server používaný aplikací ASP.NET Core se konfiguruje ve spouštěcím kódu aplikace. Výchozí server je Kestrel.

Další informace o různýchserverch

Konfigurace možností klienta

Konfigurace klienta gRPC je nastavena na .GrpcChannelOptions Možnosti konfigurace jsou v Grpc.Net.Client balíčku.

Následující tabulka popisuje možnosti konfigurace kanálů gRPC:

Možnost Výchozí hodnota Popis
HttpHandler Nová instance Používá HttpMessageHandler se k volání gRPC. Klienta lze nastavit tak, aby nakonfigurovali vlastní HttpClientHandler nebo přidali další obslužné rutiny do kanálu HTTP pro volání gRPC. Pokud není zadána žádná HttpMessageHandler hodnota, vytvoří se pro kanál nová HttpClientHandler instance s automatickým odstraněním.
HttpClient null Používá HttpClient se k volání gRPC. Toto nastavení je alternativou k HttpHandler.
DisposeHttpClient false Pokud je nastavena true hodnota a HttpMessageHandler nebo HttpClient je zadána, HttpHandler HttpClientje buď nebo , v uvedeném pořadí, uvolněna při GrpcChannel odstranění.
LoggerFactory null Používá LoggerFactory ho klient k protokolování informací o voláních gRPC. Instanci LoggerFactory lze přeložit z injektáže závislostí nebo vytvořit pomocí LoggerFactory.Create. Příklady konfigurace protokolování najdete v tématu Protokolování a diagnostika v gRPC v .NET.
MaxSendMessageSize null Maximální velikost zprávy v bajtech, které lze odeslat z klienta. Při pokusu o odeslání zprávy, která překračuje nakonfigurovanou maximální velikost zprávy, dojde k výjimce. Pokud je nastavená nullhodnota , velikost zprávy je neomezená.
MaxReceiveMessageSize 4 MB Maximální velikost zprávy v bajtech, které může klient přijímat. Pokud klient obdrží zprávu, která tento limit překročí, vyvolá výjimku. Zvýšení této hodnoty umožňuje klientovi přijímat větší zprávy, ale může negativně ovlivnit spotřebu paměti. Pokud je nastavená nullhodnota , velikost zprávy je neomezená.
Credentials null Instance ChannelCredentials . Přihlašovací údaje slouží k přidání ověřovacích metadat do volání gRPC.
CompressionProviders gzip Kolekce poskytovatelů komprese používaná ke komprimaci a dekomprimaci zpráv. Do kolekce je možné vytvořit a přidat vlastní zprostředkovatele komprese. Výchozí nakonfigurovaní zprostředkovatelé podporují kompresi gzip .
ThrowOperationCanceledOnCancellation false Pokud je nastavená hodnota true, klienti vyvolá, OperationCanceledException když je hovor zrušen nebo je překročen konečný termín.
UnsafeUseInsecureChannelCallCredentials false Pokud je nastavená hodnota true, CallCredentials použijí se u volání gRPC provedených nezabezpečeným kanálem. Odesílání hlaviček ověřování přes nezabezpečené připojení má vliv na zabezpečení a nemělo by se provádět v produkčních prostředích.
MaxRetryAttempts 5 Maximální počet pokusů o opakování. Tato hodnota omezuje všechny hodnoty opakování a hedgování pokusů zadaných v konfiguraci služby. Když tuto hodnotu nastavíte sami, nepovolíte opakování. V konfiguraci služby jsou povoleny opakované pokusy, které lze provést pomocí ServiceConfig. Hodnota null odebere limit maximálního počtu opakovaných pokusů. Další informace o opakováních najdete v tématu Zpracování přechodných chyb s opakováním gRPC.
MaxRetryBufferSize 16 MB Maximální velikost vyrovnávací paměti v bajtech, která lze použít k ukládání odeslaných zpráv při opakování nebo hedgování volání. Pokud dojde k překročení limitu vyrovnávací paměti, neprovedou se žádné další pokusy o opakování a všechna volání, ale jedna se zruší. Tento limit se použije u všech volání provedených pomocí kanálu. Hodnota null odebere maximální limit velikosti vyrovnávací paměti opakování.
MaxRetryBufferPerCallSize 1 MB Maximální velikost vyrovnávací paměti v bajtech, která lze použít k ukládání odeslaných zpráv při opakování nebo hedgování volání. Pokud dojde k překročení limitu vyrovnávací paměti, neprovedou se žádné další pokusy o opakování a všechna volání, ale jedna se zruší. Tento limit se použije u jednoho volání. Hodnota null odebere maximální limit velikosti vyrovnávací paměti opakování na volání.
ServiceConfig null Konfigurace služby pro kanál gRPC. Konfiguraci služby lze použít ke konfiguraci opakování gRPC.

Následující kód:

  • Nastaví maximální velikost zprávy pro odesílání a přijímání v kanálu.
  • Vytvoří 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);
}

Všimněte si, že průsečíky klienta nejsou nakonfigurovány na GrpcChannelOptions. Místo toho se zachytávání klientů konfigurují pomocí Intercept metody rozšíření s kanálem. Tato metoda rozšíření je v Grpc.Core.Interceptors oboru názvů.

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

možnosti obslužné rutiny System.Net

Grpc.Net.Client používá přenos HTTP odvozený z HttpMessageHandler provádění požadavků HTTP. Každá obslužná rutina nabízí další možnosti, jak se provádějí požadavky HTTP.

Obslužná rutina je nakonfigurována v kanálu a lze ji přepsat nastavením GrpcChannelOptions.HttpHandler. .NET Core 3 a .NET 5 nebo novější používá SocketsHttpHandler ve výchozím nastavení. Klientské aplikace gRPC v rozhraní .NET Framework by měly konfigurovat Rutinu WinHttpHandler.

Další informace o různých obslužných rutinách a jejich možnostech konfigurace najdete tady:

Další materiály