Nguon: Microsoft Learn · .NET 8.0

Tổng quan về gRPC trên .NET

Nguồn: gRPC for .NET overview | Phiên bản: .NET 8.0

Tác giả: James Newton-King

Lưu ý: Đây không phải phiên bản mới nhất của bài viết này. Để xem bản phát hành hiện tại, hãy xem phiên bản .NET 10 của bài viết này.

Cảnh báo: Phiên bản ASP.NET Core này không còn được hỗ trợ nữa. Để biết thêm thông tin, hãy xem Chính sách hỗ trợ .NET và .NET Core. Để xem bản phát hành hiện tại, hãy xem phiên bản .NET 10 của bài viết này.


Trong bài viết này

gRPC là một framework (khung làm việc) RPC (Remote Procedure Call - Gọi thủ tục từ xa) hiệu suất cao, không phụ thuộc ngôn ngữ lập trình.

Các lợi ích chính của gRPC bao gồm:

Những lợi ích này khiến gRPC trở nên lý tưởng cho:


Hỗ trợ công cụ C# cho các file .proto

gRPC sử dụng cách tiếp cận contract-first (hợp đồng trước) trong phát triển API. Các service (dịch vụ) và message (thông điệp) được định nghĩa trong các file .proto:

protobuf
syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Các kiểu .NET cho service (dịch vụ), client (máy khách) và message (thông điệp) được tự động tạo ra bằng cách đưa các file .proto vào project (dự án):

xml
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Để biết thêm thông tin về hỗ trợ công cụ gRPC, hãy xem gRPC services với C#.


Các gRPC service trên ASP.NET Core

Các gRPC service (dịch vụ) có thể được host (lưu trữ) trên ASP.NET Core. Các service có tích hợp đầy đủ với các tính năng của ASP.NET Core như logging (ghi nhật ký), dependency injection (DI - tiêm phụ thuộc), authentication (xác thực) và authorization (phân quyền).

Thêm các gRPC service vào ứng dụng ASP.NET Core

gRPC yêu cầu package (gói) Grpc.AspNetCore. Để biết thông tin về cách cấu hình gRPC trong ứng dụng .NET, hãy xem Configure gRPC.

Template dự án gRPC service

Template dự án ASP.NET Core gRPC Service cung cấp một service (dịch vụ) khởi đầu:

csharp
public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        logger.LogInformation("Saying hello to {Name}", request.Name);

        return Task.FromResult(new HelloReply
        {
            Message = "Hello " + request.Name
        });
    }
}
csharp
public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);

        return Task.FromResult(new HelloReply
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService kế thừa từ kiểu GreeterBase, được tạo ra từ service (dịch vụ) Greeter trong file .proto. Service được cho phép truy cập bởi các client (máy khách) trong file Program.cs:

csharp
app.MapGrpcService<GreeterService>();

Để tìm hiểu thêm, hãy xem gRPC services với ASP.NET Core.


Gọi các gRPC service bằng .NET client

Các gRPC client (máy khách) là các kiểu client (máy khách) cụ thể được tạo ra từ các file .proto. Client (máy khách) gRPC cụ thể có các phương thức tương ứng với gRPC service (dịch vụ) trong file .proto.

csharp
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Một gRPC client (máy khách) được tạo ra bằng cách sử dụng một channel (kênh), đại diện cho một kết nối tồn tại lâu dài tới một gRPC service (dịch vụ). Một channel (kênh) có thể được tạo ra bằng GrpcChannel.ForAddress.

Để biết thêm thông tin về việc tạo các client (máy khách) và gọi các phương thức service (dịch vụ) khác nhau, hãy xem Gọi các gRPC service bằng .NET client.


Nội dung liên quan