Nguon: Microsoft Learn · .NET 8.0

Tạo gRPC client và server .NET trong ASP.NET Core

Nguồn: Create a .NET gRPC client and server in ASP.NET Core

Hướng dẫn này trình bày cách tạo một gRPC client (máy khách gRPC) và một ASP.NET Core gRPC Server (máy chủ gRPC). Cuối hướng dẫn, bạn sẽ có một gRPC client giao tiếp với gRPC Greeter service (dịch vụ Greeter gRPC).

Mục tiêu hướng dẫn

Trong hướng dẫn này, bạn sẽ:

Điều kiện tiên quyết

Visual Studio

Visual Studio Code

Tạo gRPC Service

Sử dụng Visual Studio

  1. Khởi động Visual Studio và chọn Create a new Project
  2. Tìm kiếm gRPC và chọn ASP.NET Core gRPC Service
  3. Đặt tên project là GrpcGreeter (quan trọng để namespace (không gian tên) khớp)
  4. Chọn .NET 10.0 (Long Term Support) và tạo

Sử dụng Visual Studio Code

dotnetcli
dotnet new grpc -o GrpcGreeter
code -r GrpcGreeter

Chạy Service

Visual Studio:

Visual Studio Code:

dotnetcli
dotnet dev-certs https --trust

Logs (nhật ký) sẽ hiển thị:

console
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Các tệp dự án

Project GrpcGreeter chứa:

Tạo gRPC Client

Sử dụng Visual Studio

  1. Mở một instance (phiên) Visual Studio thứ hai
  2. Tạo một project Console App mới
  3. Đặt tên là GrpcGreeterClient
  4. Chọn .NET 10.0 (Long Term Support)

Sử dụng Visual Studio Code

dotnetcli
dotnet new console -o GrpcGreeterClient
code -r GrpcGreeterClient

Thêm các NuGet Package cần thiết

gRPC client cần:

Sử dụng Package Manager Console:

powershell
Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools

Sử dụng Visual Studio Code:

dotnetcli
dotnet add GrpcGreeterClient.csproj package Grpc.Net.Client
dotnet add GrpcGreeterClient.csproj package Google.Protobuf
dotnet add GrpcGreeterClient.csproj package Grpc.Tools

Thêm greet.proto

  1. Tạo thư mục Protos trong project gRPC client
  2. Sao chép Protos\greet.proto từ gRPC Greeter service
  3. Cập nhật namespace:
json
option csharp_namespace = "GrpcGreeterClient";
  1. Chỉnh sửa tệp GrpcGreeterClient.csproj và thêm:
xml
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

Tạo Greeter Client

Build (xây dựng) project client để tạo các types (kiểu) trong namespace GrpcGreeterClient.

Lưu ý: Package công cụ Grpc.Tools tự động tạo:

Cập nhật tệp Program.cs:

csharp
using Grpc.Net.Client;
using GrpcGreeterClient;

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
    new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Quan trọng: Thay port 7042 bằng HTTPS port từ Properties/launchSettings.json của gRPC server

Kiểm tra gRPC Client với Greeter Service

Visual Studio

  1. Trong project GrpcGreeter service, nhấn Ctrl+F5 để khởi động server
  2. Trong project GrpcGreeterClient, nhấn Ctrl+F5 để khởi động client

Visual Studio Code

Kết quả mong đợi

Đầu ra của client:

console
Greeting: Hello GreeterClient
Press any key to exit...

Logs của server:

console
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:<port>/greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms

Lưu ý quan trọng

Bước tiếp theo