configurazione di gRPC per .NET
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 8 di questo articolo.
Configurare le opzioni dei servizi
I servizi gRPC sono configurati con AddGrpc
in Startup.cs
. Le opzioni di configurazione si trovano nel Grpc.AspNetCore.Server
pacchetto.
La tabella seguente descrive le opzioni per la configurazione dei servizi gRPC:
Opzione | Valore predefinito | Descrizione |
---|---|---|
MaxSendMessageSize |
null |
Dimensione massima dei messaggi in byte che è possibile inviare dal server. Se si tenta di inviare un messaggio che supera la dimensione massima configurata del messaggio, viene generata un'eccezione. Se impostato su null , la dimensione del messaggio è illimitata. |
MaxReceiveMessageSize |
4 MB | Dimensione massima dei messaggi in byte che è possibile ricevere dal server. Se il server riceve un messaggio che supera questo limite, genera un'eccezione. L'aumento di questo valore consente al server di ricevere messaggi di dimensioni maggiori, ma può influire negativamente sull'utilizzo della memoria. Se impostato su null , la dimensione del messaggio è illimitata. |
EnableDetailedErrors |
false |
Se true , i messaggi di eccezione dettagliati vengono restituiti ai client quando viene generata un'eccezione in un metodo del servizio. Il valore predefinito è false . L'impostazione EnableDetailedErrors su true può causare la perdita di informazioni riservate. |
CompressionProviders |
gzip | Raccolta di provider di compressione utilizzati per comprimere e decomprimere i messaggi. I provider di compressione personalizzati possono essere creati e aggiunti alla raccolta. I provider configurati predefiniti supportano la compressione gzip . |
ResponseCompressionAlgorithm |
null |
Algoritmo di compressione utilizzato per comprimere i messaggi inviati dal server. L'algoritmo deve corrispondere a un provider di compressione in CompressionProviders . Affinché l'algoritmo comprima una risposta, il client deve indicare che supporta l'algoritmo inviandolo nell'intestazione grpc-accept-encoding . |
ResponseCompressionLevel |
null |
Livello di compressione utilizzato per comprimere i messaggi inviati dal server. |
Interceptors |
None | Raccolta di intercettori eseguiti con ogni chiamata gRPC. Gli intercettori vengono eseguiti nell'ordine in cui sono registrati. Gli intercettori configurati a livello globale vengono eseguiti prima che gli intercettori configurati per un singolo servizio. Per impostazione predefinita, gli intercettori hanno una durata per richiesta. Il costruttore dell'intercettore viene chiamato e i parametri vengono risolti dall'inserimento delle dipendenze . Un tipo di intercettore può anche essere registrato con l'inserimento delle dipendenze per eseguire l'override della modalità di creazione e della relativa durata. Gli intercettori offrono funzionalità simili rispetto a ASP.NET middleware Core. Per altre informazioni, vedere gRPC Interceptors vs. Middleware. |
IgnoreUnknownServices |
false |
Se true , le chiamate a servizi e metodi sconosciuti non restituiscono uno stato UNIMPLEMENTED e la richiesta passa al middleware registrato successivo in ASP.NET Core. |
Le opzioni possono essere configurate per tutti i servizi fornendo un delegato di opzioni alla AddGrpc
chiamata in 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
});
}
Le opzioni per un singolo servizio eseguono l'override delle opzioni globali disponibili in AddGrpc
e possono essere configurate usando 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
});
}
Per impostazione predefinita, gli intercettori di servizi hanno una durata per richiesta. La registrazione del tipo di intercettore con l'inserimento delle dipendenze esegue l'override del modo in cui viene creato un intercettore e la relativa durata.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.Interceptors.Add<LoggingInterceptor>();
});
services.AddSingleton<LoggingInterceptor>();
}
ASP.NET opzioni del server Core
Grpc.AspNetCore.Server
è ospitato da un server Web ASP.NET Core. Sono disponibili diverse opzioni per ASP.NET Server Core, tra cui Kestrel, IIS e HTTP.sys. Ogni server offre opzioni aggiuntive per la modalità di gestione delle richieste HTTP.
Il server usato da un'app ASP.NET Core è configurato nel codice di avvio dell'app. Il server predefinito è Kestrel.
Per altre informazioni sui diversi server e sulle relative opzioni di configurazione, vedere:
- Kestrel server Web in ASP.NET Core
- HTTP.sys'implementazione del server Web in ASP.NET Core
- Host ASP.NET Core in Windows con IIS
Configurare le opzioni client
La configurazione del client gRPC è impostata su GrpcChannelOptions
. Le opzioni di configurazione si trovano nel Grpc.Net.Client
pacchetto.
La tabella seguente descrive le opzioni per la configurazione dei canali gRPC:
Opzione | Valore predefinito | Descrizione |
---|---|---|
HttpHandler |
Nuova istanza | Oggetto HttpMessageHandler utilizzato per effettuare chiamate gRPC. Un client può essere impostato per configurare un gestore personalizzato HttpClientHandler o aggiungere altri gestori alla pipeline HTTP per le chiamate gRPC. Se non viene specificato alcun valore HttpMessageHandler , viene creata una nuova HttpClientHandler istanza per il canale con eliminazione automatica. |
HttpClient |
null |
Oggetto HttpClient utilizzato per effettuare chiamate gRPC. Questa impostazione è un'alternativa a HttpHandler . |
DisposeHttpClient |
false |
Se è impostato su true e viene specificato un HttpMessageHandler oggetto o HttpClient , rispettivamente l'oggetto HttpHandler o HttpClient viene eliminato quando viene GrpcChannel eliminato . |
LoggerFactory |
null |
Oggetto LoggerFactory utilizzato dal client per registrare informazioni sulle chiamate gRPC. Un'istanza LoggerFactory di può essere risolta dall'inserimento delle dipendenze o creata tramite LoggerFactory.Create . Per esempi di configurazione della registrazione, vedere Registrazione e diagnostica in gRPC in .NET. |
MaxSendMessageSize |
null |
Dimensione massima del messaggio in byte che può essere inviata dal client. Se si tenta di inviare un messaggio che supera la dimensione massima configurata del messaggio, viene generata un'eccezione. Se impostato su null , la dimensione del messaggio è illimitata. |
MaxReceiveMessageSize |
4 MB | Dimensione massima del messaggio in byte che può essere ricevuta dal client. Se il client riceve un messaggio che supera questo limite, genera un'eccezione. L'aumento di questo valore consente al client di ricevere messaggi più grandi, ma può influire negativamente sull'utilizzo della memoria. Se impostato su null , la dimensione del messaggio è illimitata. |
Credentials |
null |
Istanza di ChannelCredentials . Le credenziali vengono usate per aggiungere metadati di autenticazione alle chiamate gRPC. |
CompressionProviders |
gzip | Raccolta di provider di compressione utilizzati per comprimere e decomprimere i messaggi. I provider di compressione personalizzati possono essere creati e aggiunti alla raccolta. I provider configurati predefiniti supportano la compressione gzip . |
ThrowOperationCanceledOnCancellation |
false |
Se impostato su true , i client generano un'eccezione OperationCanceledException quando una chiamata viene annullata o la scadenza viene superata. |
UnsafeUseInsecureChannelCallCredentials |
false |
Se impostato su true , CallCredentials vengono applicate alle chiamate gRPC effettuate da un canale non sicuro. L'invio di intestazioni di autenticazione tramite una connessione non sicura ha implicazioni per la sicurezza e non deve essere eseguita negli ambienti di produzione. |
MaxRetryAttempts |
5 | Numero massimo di tentativi. Questo valore limita i valori di tentativi e di hedging specificati nella configurazione del servizio. L'impostazione di questo valore da solo non abilita i tentativi. I tentativi sono abilitati nella configurazione del servizio, operazione che può essere eseguita usando ServiceConfig . Un null valore rimuove il limite massimo di tentativi. Per altre informazioni sui tentativi, vedere Gestione degli errori temporanei con tentativi gRPC. |
MaxRetryBufferSize |
16 MB | Dimensione massima del buffer in byte che può essere usata per archiviare i messaggi inviati durante i tentativi o l'hedging delle chiamate. Se viene superato il limite di buffer, non vengono eseguiti altri tentativi e tutte le chiamate di hedging, ma ne verrà annullata una. Questo limite viene applicato a tutte le chiamate effettuate tramite il canale. Un null valore rimuove il limite massimo di dimensioni del buffer di ripetizione dei tentativi. |
MaxRetryBufferPerCallSize |
1 MB | Dimensione massima del buffer in byte che può essere usata per archiviare i messaggi inviati durante i tentativi o l'hedging delle chiamate. Se viene superato il limite di buffer, non vengono eseguiti altri tentativi e tutte le chiamate di hedging, ma ne verrà annullata una. Questo limite viene applicato a una chiamata. Un null valore rimuove il limite massimo di dimensioni del buffer di ripetizione dei tentativi per ogni chiamata. |
ServiceConfig |
null |
Configurazione del servizio per un canale gRPC. Una configurazione del servizio può essere usata per configurare i tentativi gRPC. |
Il codice seguente:
- Imposta la dimensione massima del messaggio di invio e ricezione nel canale.
- Crea un 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);
}
Si noti che gli intercettori client non sono configurati con GrpcChannelOptions
. Gli intercettori client vengono invece configurati usando il Intercept
metodo di estensione con un canale. Questo metodo di estensione si trova nello spazio dei Grpc.Core.Interceptors
nomi .
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);
}
opzioni del gestore System.Net
Grpc.Net.Client
usa un trasporto HTTP derivato da HttpMessageHandler
per effettuare richieste HTTP. Ogni gestore offre opzioni aggiuntive per il modo in cui vengono effettuate le richieste HTTP.
Il gestore è configurato in un canale e può essere sottoposto a override impostando GrpcChannelOptions.HttpHandler
. .NET Core 3 e .NET 5 o versioni successive usano per SocketsHttpHandler impostazione predefinita. Le app client gRPC in .NET Framework devono configurare WinHttpHandler.
Per altre informazioni sui diversi gestori e sulle relative opzioni di configurazione, vedere: