Nguon: Microsoft Learn · .NET 8.0
Tạo gRPC client và server .NET trong 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ẽ:
- Tạo một gRPC Server
- Tạo một gRPC client
- Kiểm tra gRPC client với gRPC Greeter service
Điều kiện tiên quyết
Visual Studio
- Phiên bản mới nhất của Visual Studio với workload (tải công việc) ASP.NET and web development
Visual Studio Code
- Visual Studio Code
- C# Dev Kit for Visual Studio Code
- .NET 10.0 SDK (hoặc phiên bản SDK phù hợp với phiên bản ASP.NET Core của bạn)
Tạo gRPC Service
Sử dụng Visual Studio
- Khởi động Visual Studio và chọn Create a new Project
- Tìm kiếm
gRPCvà chọn ASP.NET Core gRPC Service - Đặt tên project là
GrpcGreeter(quan trọng để namespace (không gian tên) khớp) - 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:
- Nhấn Ctrl+F5 để chạy không có debugger (trình gỡ lỗi)
- Tin tưởng certificate (chứng chỉ) IIS Express SSL khi được nhắc
- Service sẽ khởi động tại
https://localhost:<port>
Visual Studio Code:
dotnetcli
dotnet dev-certs https --trust
- Nhấn Ctrl-F5 để chạy không có debugger
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: DevelopmentCác tệp dự án
Project GrpcGreeter chứa:
Protos/greet.proto: Định nghĩaGreetergRPC service- Thư mục
Services: Chứa implementation (triển khai) củaGreeterservice appsettings.json: Dữ liệu cấu hình cho protocols (giao thức) và KestrelProgram.cs: Entry point (điểm khởi đầu) của gRPC service
Tạo gRPC Client
Sử dụng Visual Studio
- Mở một instance (phiên) Visual Studio thứ hai
- Tạo một project Console App mới
- Đặt tên là
GrpcGreeterClient - 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:
- Grpc.Net.Client: .NET client
- Google.Protobuf: Protobuf message APIs cho C#
- Grpc.Tools: Hỗ trợ công cụ C# cho các tệp protobuf
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
- Tạo thư mục Protos trong project gRPC client
- Sao chép Protos\greet.proto từ gRPC Greeter service
- Cập nhật namespace:
json
option csharp_namespace = "GrpcGreeterClient";
- Chỉnh sửa tệp
GrpcGreeterClient.csprojvà 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:
Greet.cs: Mã protocol buffer cho các kiểu message yêu cầu/phản hồiGreetGrpc.cs: Các lớp client được tạo tự động
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
- Trong project
GrpcGreeterservice, nhấnCtrl+F5để khởi động server - Trong project
GrpcGreeterClient, nhấnCtrl+F5để khởi động client
Visual Studio Code
- Khởi động Greeter service
- Khởi động client
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.4615msLưu ý quan trọng
- Template gRPC sử dụng Transport Layer Security (TLS) (Bảo mật lớp truyền tải)
- gRPC client cần sử dụng HTTPS để gọi đến server
- Port localhost được gán ngẫu nhiên và thiết lập trong
Properties/launchSettings.json - Nếu client thất bại với lỗi xác thực certificate, xem Gọi gRPC service với certificate không tin cậy/không hợp lệ