Sử dụng gRPC client với .NET Standard 2.0
Bài viết này thảo luận cách sử dụng .NET gRPC client với các triển khai .NET hỗ trợ .NET Standard 2.0.
Các triển khai .NET
Các triển khai .NET sau (hoặc mới hơn) hỗ trợ Grpc.Net.Client nhưng không có hỗ trợ đầy đủ cho HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Universal Windows Platform 10.0.16299
- Unity 2018.1
.NET gRPC client có thể gọi các dịch vụ từ các triển khai .NET này với một số cấu hình bổ sung.
Cấu hình HttpHandler
Một HTTP provider phải được cấu hình bằng cách sử dụng GrpcChannelOptions.HttpHandler. Nếu không cấu hình handler, một lỗi sẽ được ném ra:
System.PlatformNotSupportedException: gRPC yêu cầu cấu hình thêm để thực hiện thành công các lệnh gọi RPC trên các triển khai .NET không có hỗ trợ cho gRPC qua HTTP/2. Một HTTP provider phải được chỉ định bằng cách sử dụng GrpcChannelOptions.HttpHandler. HTTP provider được cấu hình phải hỗ trợ HTTP/2 hoặc được cấu hình để sử dụng gRPC-Web.
Các triển khai .NET không hỗ trợ HTTP/2, chẳng hạn như UWP và Unity, có thể sử dụng gRPC-Web như một giải pháp thay thế.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = new GrpcWebHandler(new HttpClientHandler())
});
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });Client cũng có thể được tạo bằng gRPC client factory. Một HTTP provider được cấu hình bằng phương thức mở rộng ConfigurePrimaryHttpMessageHandler.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));Để biết thêm thông tin, xem Configure gRPC-Web with the .NET gRPC client.
gRPC-Web yêu cầu cả client và server đều phải hỗ trợ nó. gRPC-Web có thể được cấu hình nhanh chóng bởi ASP.NET Core gRPC server. Các triển khai gRPC server khác yêu cầu proxy để hỗ trợ gRPC-Web.
.NET Framework
.NET Framework có hỗ trợ hạn chế cho gRPC qua HTTP/2. Để bật gRPC qua HTTP/2 trên .NET Framework, hãy cấu hình channel để sử dụng WinHttpHandler.
Các yêu cầu và hạn chế khi sử dụng WinHttpHandler:
- Windows 11 trở lên, Windows Server 2019 trở lên.
- gRPC client được hỗ trợ đầy đủ trên Windows 11 trở lên.
- gRPC client được hỗ trợ một phần trên Windows Server 2019 và Windows Server 2022. Các method Unary và server streaming được hỗ trợ. Các method Client và bidirectional streaming không được hỗ trợ.
- Tham chiếu đến
System.Net.Http.WinHttpHandlerphiên bản 6.0.1 trở lên. - Cấu hình
WinHttpHandlertrên channel bằngGrpcChannelOptions.HttpHandler. - .NET Framework 4.6.1 trở lên.
- Chỉ hỗ trợ các lệnh gọi gRPC qua TLS.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = new WinHttpHandler()
});
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });gRPC client trên .NET Framework chậm hơn so với trên các phiên bản .NET hiện đại. Để cải thiện hiệu suất gRPC, ứng dụng nên được cập nhật để sử dụng .NET hiện đại.
gRPC C# core-library
Một tùy chọn thay thế cho .NET Framework là sử dụng gRPC C# core-library để thực hiện các lệnh gọi gRPC. gRPC C# core-library là:
- Thư viện bên thứ ba hỗ trợ thực hiện các lệnh gọi gRPC qua HTTP/2 trên .NET Framework.
- Không được hỗ trợ bởi Microsoft.
- Đang ở chế độ bảo trì và sẽ được ngừng sử dụng để ủng hộ gRPC cho .NET.
- Không được khuyến nghị cho các ứng dụng mới.