ASP.NET Core: Hướng dẫn tạo máy khách và máy chủ gRPC trong ASP.NET Core
Bài hướng dẫn này chỉ ra cách tạo máy khách gRPC .NET Core và máy chủ gRPC ASP.NET Core. Cuối cùng, bạn sẽ có một ứng dụng khách gRPC giao tiếp với dịch vụ gRPC Greeter.
Trong hướng dẫn này, bạn:
- Tạo máy chủ gRPC.
- Tạo một ứng dụng khách gRPC.
- Kiểm tra ứng dụng khách gRPC bằng dịch vụ gRPC Greeter.
Điều kiện tiên quyết
Visual Studio 2022 với ASP.NET and web development.
Tạo dịch vụ gRPC
- Khởi động Visual Studio 2022 và chọn Create a new project.
- Trong hộp thoại Create a new project, tìm kiếm
gRPC
. Chọn ASP.NET Core gRPC Service và chọn Next. - Trong hộp thoại Configure your new project, hãy nhập
GrpcGreeter
cho Project name. Điều quan trọng là phải đặt tên cho dự án là GrpcGreeter để các vùng tên khớp với nhau khi bạn sao chép và dán mã. - Chọn Next.
- Trong hộp thoại Additional information, chọn .NET 6.0 (Long-term support) rồi chọn Create.
Chạy dịch vụ
-
Nhấn Ctrl+F5 để chạy mà không cần trình gỡ lỗi.
Visual Studio hiển thị hộp thoại sau khi dự án chưa được định cấu hình để sử dụng SSL:
Chọn Yes nếu bạn tin cậy chứng chỉ SSL IIS Express.
Hộp thoại sau đây được hiển thị:
Chọn Yes nếu bạn đồng ý tin cậy chứng chỉ phát triển.
Để biết thông tin về việc tin cậy trình duyệt Firefox, hãy xem Lỗi chứng chỉ Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.
Visual Studio:
- Khởi động máy chủ Kestrel.
- Khởi chạy một trình duyệt.
- Điều hướng đến
http://localhost:port
, chẳng hạn nhưhttp://localhost:7042
.- port : Số cổng được gán ngẫu nhiên cho ứng dụng.
localhost
: Tên máy chủ tiêu chuẩn cho máy tính cục bộ. Localhost chỉ phục vụ các yêu cầu web từ máy tính cục bộ.
Nhật ký hiển thị dịch vụ đang nghe https://localhost:<port>
, trong đó <port>
là số cổng localhost được chỉ định ngẫu nhiên ở đâu khi dự án được tạo và đặt trong Properties/launchSettings.json
.
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
Lưu ý
Mẫu gRPC được định cấu hình để sử dụng Transport Layer Security (TLS) . Máy khách gRPC cần sử dụng HTTPS để gọi máy chủ. Số cổng localhost của dịch vụ gRPC được chỉ định ngẫu nhiên khi dự án được tạo và đặt trong tệp Properties\launchSettings.json của dự án dịch vụ gRPC.
macOS không hỗ trợ gRPC ASP.NET Core với TLS. Cần có cấu hình bổ sung để chạy thành công các dịch vụ gRPC trên macOS. Để biết thêm thông tin, hãy xem Không thể khởi động ứng dụng ASP.NET Core gRPC trên macOS.
Kiểm tra các tập tin dự án
Các tệp dự án GrpcGreeter:
Protos/greet.proto
: Định nghĩa gRPCGreeter
và được sử dụng để tạo nội dung máy chủ gRPC. Để biết thêm thông tin, hãy xem Giới thiệu về gRPC.- Thư mục
Services
: Chứa việc triển khai dịch vụGreeter
. appSettings.json
: Chứa dữ liệu cấu hình như giao thức được Kestrel sử dụng. Để biết thêm thông tin, hãy xem Cấu hình trong ASP.NET Core.Program.cs
, trong đó có:- Điểm truy cập cho dịch vụ gRPC. Để biết thêm thông tin, hãy xem Máy chủ chung .NET trong ASP.NET Core.
- Mã cấu hình hành vi ứng dụng. Để biết thêm thông tin, hãy xem Khởi động ứng dụng.
Tạo ứng dụng khách gRPC trong ứng dụng console .NET
- Mở phiên bản thứ hai của Visual Studio và chọn Create a new project.
- Trong hộp thoại Create a new project, chọn Console Application và chọn Next.
- Trong hộp văn bản Project name, nhập GrpcGreeterClient và chọn Next.
- Trong hộp thoại Additional information, chọn .NET 6.0 (Long-term support) rồi chọn Create.
Thêm các gói NuGet cần thiết
Dự án máy khách gRPC yêu cầu các gói NuGet sau:
- Grpc.Net.Client, chứa ứng dụng khách .NET Core.
- Google.Protobuf, chứa các API thông báo protobuf cho C#.
- Grpc.Tools, chứa công cụ hỗ trợ C# cho các tệp protobuf. Gói công cụ này không bắt buộc trong thời gian chạy, vì vậy phần phụ thuộc được đánh dấu bằng
PrivateAssets="All"
.
Cài đặt các gói bằng Bảng điều khiển quản lý gói (PMC) hoặc Quản lý gói NuGet.
Tùy chọn PMC để cài đặt gói
-
Từ Visual Studio, chọn Tools > NuGet Package Manager > Package Manager Console
-
Từ cửa sổ Package Manager Console, hãy chạy
cd GrpcGreeterClient
để thay đổi thư mục sang thư mục chứa các fileGrpcGreeterClient.csproj
. -
Chạy các lệnh sau:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Tùy chọn Manage NuGet Packages để cài đặt gói
- Nhấp chuột phải vào dự án trong Solution Explorer > Manage NuGet Packages.
- Chọn tab Browse.
- Nhập Grpc.Net.Client vào hộp tìm kiếm.
- Chọn gói Grpc.Net.Client từ tab Browse và chọn Install.
- Lặp lại các bước trên với
Google.Protobuf
vàGrpc.Tools
.
Thêm greet.proto
- Tạo thư mục Protos trong dự án máy khách gRPC.
- Sao chép tệp Protos\greet.proto từ dịch vụ gRPC Greeter vào thư mục Protos trong dự án máy khách gRPC.
- Cập nhật namespace bên trong file
greet.proto
vào namespace của dự án:
option csharp_namespace = "GrpcGreeterClient";
- Chỉnh sửa file dự án
GrpcGreeterClient.csproj
: Nhấp chuột phải vào dự án và chọn Edit Project File. - Thêm nhóm mục có phần tử
<Protobuf>
mà tham chiếu đến file greet.proto:
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Tạo ứng dụng khách Greeter
- Xây dựng dự án máy khách để tạo các kiểu trong namespace
GrpcGreeterClient
.
Lưu ý
Các kiểu
GrpcGreeterClient
được tạo tự động bởi quá trình dựng. Gói công cụ Grpc.Tools tạo các tệp sau dựa trên tệp hello.proto:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: Mã vùng đệm giao thức điền, tuần tự hóa và truy xuất các loại thông báo yêu cầu và phản hồi.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Chứa các lớp client được tạo ra.Để biết thêm thông tin về nội dung C# được Grpc.Tools tự động tạo, hãy xem các dịch vụ gRPC với C#: Nội dung C# được tạo.
- Cập nhật file máy khách gRPC
Program.cs
bằng mã sau.
using System.Threading.Tasks; 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();
- Trong mã được đánh dấu trước đó, hãy thay thế số cổng localhost
7042
bằng số cổngHTTPS
được chỉ định trongProperties/launchSettings.json
bằng dự án dịch vụGrpcGreeter
.
Program.cs
chứa điểm vào và logic cho máy khách gRPC.
Ứng dụng khách Greeter được tạo bởi:
- Khởi tạo một
GrpcChannel
chứa thông tin để tạo kết nối với dịch vụ gRPC. - Sử dụng
GrpcChannel
để xây dựng ứng dụng khách Greeter:
// 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();
Máy khách Greeter gọi phương thức không đồng bộ SayHello
. Kết quả lời gọi SayHello
được hiển thị:
// 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();
Kiểm tra ứng dụng khách gRPC với dịch vụ gRPC Greeter
Cập nhật file appsettings.Development.json
bằng cách thêm các dòng được đánh dấu sau:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- Trong dịch vụ GrpcGreeter, nhấn
Ctrl+F5
để khởi động máy chủ mà không cần trình gỡ lỗi. - Trong dự án
GrpcGreeterClient
, nhấnCtrl+F5
để khởi động máy khách mà không cần trình gỡ lỗi.
Máy khách gửi lời chào đến dịch vụ bằng tin nhắn chứa tên của nó, GreeterClient. Dịch vụ sẽ gửi tin nhắn "Hello GreeterClient" dưới dạng phản hồi. Phản hồi "Hello GreeterClient" được hiển thị trong dấu nhắc lệnh:
Greeting: Hello GreeterClient Press any key to exit...
Dịch vụ gRPC ghi lại chi tiết lời gọi thành công trong nhật ký được ghi vào dấu nhắc lệnh:
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.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
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 in 78.32260000000001ms 200 application/grpc
Lưu ý
Code trong bài viết này yêu cầu chứng chỉ phát triển ASP.NET Core HTTPS để bảo mật dịch vụ gRPC. Nếu ứng dụng khách .NET gRPC không thành công với thông báo
The remote certificate is invalid according to the validation procedure.
hoặcThe SSL connection could not be established.
, thì chứng chỉ phát triển không đáng tin cậy. Để khắc phục sự cố này, hãy xem Gọi dịch vụ gRPC bằng chứng chỉ không đáng tin cậy/không hợp lệ.
Bước tiếp theo
- Xem hoặc tải xuống code mẫu đã hoàn chỉnh cho hướng dẫn này ( cách tải xuống ).
- Tổng quan về gRPC trên .NET
- Dịch vụ gRPC với C#
- Di chuyển gRPC từ C-core sang gRPC cho .NET