gRPC - Setup service options with ASP.NET Core

在 ASP.NET Core 支援設定的 gRPC service option 有:

Option Default Description
SendMaxMessageSize null 最大訊息大小可以從伺服器傳送的位元組數。 嘗試傳送的訊息長度超過設定的最大訊息大小會導致例外狀況。
ReceiveMaxMessageSize 4 MB 最大訊息大小可以由伺服器接收的位元組數。 如果伺服器收到的訊息超過此限制,它會擲回例外狀況。 增加此值可讓伺服器接收較大的訊息,但可能會造成負面影響記憶體耗用量。
EnableDetailedErrors false 如果true詳細服務方法擲回例外狀況時,將會傳回給用戶端的例外狀況訊息。 預設為 false。 這個設定設為true可能會導致洩漏機密資訊。


可在 Startup 的 ConfigureServices 內透過 services.AddGrpc 針對所有 Service 下去設定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddGrpc(options =>
{
options.ReceiveMaxMessageSize = receiveMsgLimit;
options.SendMaxMessageSize = sendMsgLimit;
});
...
}
...
}


也可以透過 services.AddGrpc().AddServiceOptions 針對特定 Service 下去設定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
...
services.AddGrpc().AddServiceOptions<GreeterService>(options =>
{
options.ReceiveMaxMessageSize = receiveMsgLimit;
options.SendMaxMessageSize = sendMsgLimit;
});
...
}
...
}


這邊筆者為了測試效果特定將設定值調的極端的低,實際使用上請依使用情境下去調整。