ASP.NET Core: Hướng dẫn tạo máy khách và máy chủ gRPC trong ASP.NET Core


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

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.

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:

    Dự án này được cấu hình để sử dụng SSL.  Để tránh cảnh báo SSL trong trình duyệt, bạn có thể chọn tin cậy chứng chỉ tự ký mà IIS Express đã tạo.  Bạn có muốn tin cậy chứng chỉ SSL IIS Express không?

    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ị:

    Hộp thoại cảnh báo bảo mật

    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 gRPC Greeter 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ó:

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 file GrpcGreeterClient.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ổng HTTPS được chỉ định trong Properties/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ấn Ctrl+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ặc The 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

Nguồn: learn.microsoft.com
» Tiếp: Tổng quan dịch vụ gRPC với C#
« Trước: Tổng quan về gRPC trên .NET
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!