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.cs
systé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á null hodnota , 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á null hodnota , velikost zprávy je neomezená. |
EnableDetailedErrors |
false |
Pokud true se 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 CompressionProviders souboru . 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 true volá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
- Kestrel webový server v ASP.NET Core
- Implementace webového serveru HTTP.sys v ASP.NET Core
- Hostování ASP.NET Core ve Windows pomocí služby IIS
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 HttpClient je 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á null hodnota , 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á null hodnota , 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: