Konfigurace gRPC pro .NET

Konfigurace možností služeb

služby gRPC Services se konfigurují AddGrpc v nástroji Startup.cs . V balíčku jsou možnosti konfigurace Grpc.AspNetCore.Server .

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á se dá odeslat ze serveru. Při pokusu o odeslání zprávy, která přesahuje nakonfigurovanou maximální velikost zprávy, dojde k výjimce. Při nastavení na je null velikost zprávy neomezená.
MaxReceiveMessageSize 4 MB Maximální velikost zprávy v bajtech, kterou může server přijmout. Pokud server obdrží zprávu, která tento limit překračuje, vyvolá výjimku. Zvýšením této hodnoty umožníte serveru přijímat větší zprávy, ale můžou negativně ovlivnit spotřebu paměti. Při nastavení na je null velikost zprávy neomezená.
EnableDetailedErrors false Pokud se true do klientů vrátí podrobné zprávy o výjimce, pokud je vyvolána výjimka v metodě služby. Výchozí formát je false. Nastavení EnableDetailedErrors na true může nevracení citlivých informací.
CompressionProviders GZIP Kolekce zprostředkovatelů komprese používaných ke komprimaci a dekompresi zpráv. Vlastní zprostředkovatelé komprese lze vytvořit a přidat do kolekce. Výchozí konfigurovaná zprostředkovatelé podporují kompresi gzip .
ResponseCompressionAlgorithm null Kompresní algoritmus používaný ke kompresi zpráv odeslaných ze serveru. Algoritmus se musí shodovat se zprostředkovatelem komprese v CompressionProviders . Aby algoritmus mohl zkomprimovat odpověď, musí klient označit, že podporuje algoritmus, a to tak, že ho pošle v hlavičce grpc-Accept-Encoding .
ResponseCompressionLevel null Úroveň komprimace používaná ke kompresi zpráv odeslaných ze serveru.
Interceptors Žádná Kolekce zachycení, které jsou spouštěny s každým voláním gRPC. Zachycení se spouští v pořadí, v jakém jsou zaregistrovaná. Globálně nakonfigurované zachycení se spouští před zachyceními nakonfigurovanými pro jednu službu. Další informace o zachycených gRPC naleznete v tématu GRPC zachycení vs. middleware.
IgnoreUnknownServices false Pokud true volání neznámých služeb a metod nevrátí Neimplementovaný stav a požadavek projde do dalšího registrovaného middlewaru v ASP.NET Core.

Možnosti lze nakonfigurovat pro všechny služby tím, že poskytnete možnosti delegáta pro AddGrpc volání 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 pro jednu službu přepíší globální možnosti poskytované v AddGrpc a můžou být nakonfigurované 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
    });
}

Konfigurace možností klienta

Konfigurace klienta gRPC je nastavená na GrpcChannelOptions . V balíčku jsou možnosti konfigurace Grpc.Net.Client .

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

Možnost Výchozí hodnota Popis
HttpHandler Nová instance HttpMessageHandlerSlouží k provádění volání gRPC. Klienta lze nastavit tak, aby nakonfiguroval vlastní HttpClientHandler nebo přidal další obslužné rutiny do kanálu HTTP pro volání gRPC. Pokud HttpMessageHandler není zadaný, vytvoří se HttpClientHandler pro kanál nová instance s automatickým vyřazením.
HttpClient null HttpClientSlouží k provádění volání gRPC. Toto nastavení je alternativou k HttpHandler .
DisposeHttpClient false Je-li nastavena na true a HttpMessageHandler nebo HttpClient je zadána možnost nebo, pak buď HttpHandler nebo HttpClient , v uvedeném pořadí, je uvolněna při GrpcChannel vyřazení.
LoggerFactory null LoggerFactoryKlient používaný klientem k protokolování informací o voláních gRPC. LoggerFactoryInstanci lze přeložit z injektáže závislosti 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, kterou je možné odeslat z klienta. Při pokusu o odeslání zprávy, která přesahuje nakonfigurovanou maximální velikost zprávy, dojde k výjimce. Při nastavení na je null velikost zprávy neomezená.
MaxReceiveMessageSize 4 MB Maximální velikost zprávy v bajtech, kterou může klient přijmout. Pokud klient obdrží zprávu, která tento limit překračuje, vyvolá výjimku. Zvýšením této hodnoty umožníte klientovi přijímat větší zprávy, ale může negativně ovlivnit spotřebu paměti. Při nastavení na je null velikost zprávy neomezená.
Credentials null ChannelCredentialsInstance. Přihlašovací údaje se používají k přidání metadat ověřování pro volání gRPC.
CompressionProviders GZIP Kolekce zprostředkovatelů komprese používaných ke komprimaci a dekompresi zpráv. Vlastní zprostředkovatelé komprese lze vytvořit a přidat do kolekce. Výchozí konfigurovaná zprostředkovatelé podporují kompresi gzip .
ThrowOperationCanceledOnCancellation false Pokud je nastaveno na true , klienti vyvolávají, OperationCanceledException když je zrušené volání, nebo je překročen konečný termín.
MaxRetryAttempts 5 Maximální počet opakovaných pokusů. Tato hodnota omezuje všechny hodnoty pokusů o opakování a zajištění provozu zadané v konfiguraci služby. Nastavení této hodnoty pouze nepovoluje opakované pokusy. V konfiguraci služby jsou povoleny opakované pokusy, které lze provést pomocí nástroje ServiceConfig . nullHodnota odstraní limit maximálního počtu pokusů o opakování. Další informace o opakovaných pokusůch naleznete v tématu Zpracování přechodných chyb pomocí opakování gRPC .
MaxRetryBufferSize 16 MB Maximální velikost vyrovnávací paměti v bajtech, která se dá použít k ukládání odeslaných zpráv při opakování nebo probíhajících voláních. Pokud dojde k překročení limitu vyrovnávací paměti, neprovádí se žádné další pokusy o opakování a veškerá zasílaná volání, ale jedna se zruší. Toto omezení se použije ve všech voláních, která probíhají pomocí kanálu. nullHodnota odstraní limit maximální velikosti vyrovnávací paměti pro opakování.
MaxRetryBufferPerCallSize 1 MB Maximální velikost vyrovnávací paměti v bajtech, která se dá použít k ukládání odeslaných zpráv při opakování nebo probíhajících voláních. Pokud dojde k překročení limitu vyrovnávací paměti, neprovádí se žádné další pokusy o opakování a veškerá zasílaná volání, ale jedna se zruší. Toto omezení se použije na jedno volání. nullHodnota odstraní limit maximální velikosti vyrovnávací paměti pro počet opakování na jedno volání.
ServiceConfig null Konfigurace služby pro gRPC kanál Ke konfiguraci gRPCch pokusůse dá použít konfigurace služby.

Následující kód:

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

Upozornění

ASP.NET Core gRPC má další požadavky pro použití s Azure App Service nebo službou IIS. Další informace o tom, kde lze použít gRPC, naleznete v tématu gRPC na platformách podporovaných .NET .

Další materiály