Net Core gRPC - 05. 适用于 .NET 的 gRPC 配置

Net Core gRPC 系列

1. 服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// server独立配置 名称必须与注入的server类名一致
"ColaGrpcServer": {
//可以从服务器发送的最大消息大小 单位MB
"MaxSendMessageSize": null,
//可以由服务器接收的最大消息大小 单位MB
"MaxReceiveMessageSize": null,
//如果为 true,则当服务方法中引发异常时,会将详细异常消息返回到客户端 设置为 true 可能会泄漏敏感信息
"EnableDetailedErrors": false,
//如果为 true,则对未知服务和方法的调用不会返回 UNIMPLEMENTED 状态,并且请求会传递到 ASP.NET Core 中的下一个注册中间件
"IgnoreUnknownServices": false,
// 单独服务配置节点名称必须和服务实现类名称一致
"GreeterService": {
//可以从服务器发送的最大消息大小 单位MB
"MaxSendMessageSize": null,
//可以由服务器接收的最大消息大小 单位MB
"MaxReceiveMessageSize": null,
//如果为 true,则当服务方法中引发异常时,会将详细异常消息返回到客户端 设置为 true 可能会泄漏敏感信息
"EnableDetailedErrors": false,
//如果为 true,则对未知服务和方法的调用不会返回 UNIMPLEMENTED 状态,并且请求会传递到 ASP.NET Core 中的下一个注册中间件
"IgnoreUnknownServices": false
}
}
1
2
builder.Services.AddColaGrpc(config)
.AddColaSingleServerGrpc<GreeterService>(config);

2. 客户端配置

1
2
3
4
5
6
7
8
9
10
"ColaGrpcClient": {
//如果设置为 true 且指定了 HttpMessageHandler 或 HttpClient,则在处置 GrpcChannel 时,将分别处置 HttpHandler 或 HttpClient
"DisposeHttpClient": false,
//可以从客户端发送的最大消息大小 单位MB
"MaxSendMessageSize": null,
//可以由客户端接收的最大消息大小 单位MB
"MaxReceiveMessageSize": null,
//如果设置为 true,则在取消调用或超过其截止时间时,客户端将引发 OperationCanceledException
"ThrowOperationCanceledOnCancellation": false
}
注入grpc客户端
1
2
3
4
5
6
7
8
builder.Services.AddGrpcClient<Greeter.GreeterClient>(o =>
{
o.Address = new Uri("https://localhost:5005");
}).ConfigureChannel(options =>
{
options.CreateGrpcClientChannelOptions(config);
});
var client = builder.Services.BuildServiceProvider().GetService<Greeter.GreeterClient>();
IPC进程内调用grpc
1
2
3
4
//net core 3.x 显式的指定HTTP/2不需要TLS支持
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
var channel = new ColaGrpcHelper(new ColaWindowsGrpc()).CreateChannel("https://localhost:5005",config);
var client = new Greeter.GreeterClient(channel);

完整代码可以在 GitHub

WebApplication1Test 整合了grpc,ConsoleApp1Test有具体调用示例