Nguon: Microsoft Learn · .NET 8.0

Sử dụng gRPC client với .NET Standard 2.0

Nguồn: Use gRPC client with .NET Standard 2.0

Bởi James Newton-King

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 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ế.

csharp
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.

csharp
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ả clientserver đề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:

csharp
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à: