ASP.NET Core: Sử dụng ứng dụng khách gRPC với .NET Standard 2.0
Trong bài viết này
Bài viết này thảo luận về cách sử dụng máy khách .NET gRPC với các triển khai .NET hỗ trợ .NET Standard 2.0.
Triển khai .NET
Các triển khai .NET phiên bản sau (hoặc mới hơn) hỗ trợ Grpc.Net.Client nhưng không hỗ trợ đầy đủ cho HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Android 8.0
- Universal Windows Platform 10.0.16299
- Unity 2018.1
Máy khách .NET gRPC 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
Nhà cung cấp HTTP phải được định cấu hình bằng GrpcChannelOptions.HttpHandler
. Nếu trình xử lý không được định cấu hình thì sẽ xảy ra lỗi:
System.PlatformNotSupportedException
: gRPC yêu cầu cấu hình bổ sung để thực hiện thành công lệnh gọi RPC khi triển khai .NET không hỗ trợ gRPC qua HTTP/2. Nhà cung cấp HTTP phải được chỉ định bằng cách sử dụngGrpcChannelOptions.HttpHandler
. Nhà cung cấp HTTP được định cấu hình phải hỗ trợ HTTP/2 hoặc được định 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, Xamarin và Unity, có thể sử dụng gRPC-Web 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" });
Máy khách cũng có thể được tạo bằng cách sử dụng Factory máy khách gRPC. Nhà cung cấp HTTP được định cấu hình bằng phương thức tiện ích 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, hãy xem Định cấu hình gRPC-Web với ứng dụng khách .NET gRPC.
Quan trọng
gRPC-Web yêu cầu máy khách và máy chủ hỗ trợ nó. gRPC-Web có thể được cấu hình nhanh chóng bởi máy chủ gRPC ASP.NET Core. Việc triển khai máy chủ gRPC khác yêu cầu proxy để hỗ trợ gRPC-Web.
Framework .NET
.NET Framework hỗ trợ hạn chế cho gRPC qua HTTP/2. Để bật gRPC qua HTTP/2 trên .NET Framework, hãy định cấu hình kênh để sử dụng WinHttpHandler.
Yêu cầu và hạn chế khi sử dụng WinHttpHandler
:
- Windows 11 trở lên, Windows Server 2022 trở lên.
- Máy khách gRPC được hỗ trợ đầy đủ trên Windows 11 trở lên.
- Máy khách gRPC được hỗ trợ một phần trên Windows Server 2022. Hỗ trợ các phương thức truyền phát đơn nhất và máy chủ. Phương thức truyền phát máy khách và hai chiều không được hỗ trợ.
- Tham chiếu đến System.Net.Http.WinHttpHandler phiên bản 6.0.1 trở lên.
- Định cấu hình
WinHttpHandler
trên kênh bằng cách sử dụngGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 trở lên.
- Chỉ hỗ trợ các lời 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" });
Thư viện lõi gRPC C#
Một tùy chọn thay thế cho .NET Framework và Xamarin là sử dụng thư viện lõi gRPC C# để thực hiện lệnh gọi gRPC. Thư viện lõi gRPC C# là:
- Thư viện của bên thứ ba hỗ trợ thực hiện lệnh gọi gRPC qua HTTP/2 trên .NET Framework và Xamarin.
- Không được Microsoft hỗ trợ.
- Ở chế độ bảo trì và sẽ không được dùng nữa để chuyển sang gRPC cho .NET.
- Không được khuyến nghị cho các ứng dụng mới.
Tài nguyên bổ sung
- Gọi các dịch vụ gRPC bằng máy khách .NET
- Sử dụng gRPC trong ứng dụng trình duyệt
- Thư viện lõi gRPC C#