ASP.NET Core: Di chuyển (Migrate) gRPC từ C-core sang gRPC cho .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

Trong bài viết này

  1. Hỗ trợ nền tảng
  2. Cấu hình máy chủ và kênh
  3. Các dịch vụ và máy khách được tạo mã
  4. Thời gian triển khai dịch vụ gRPC
  5. Định cấu hình tùy chọn dịch vụ gRPC
  6. Ghi nhật ký
  7. HTTPS
  8. Trình chặn gRPC
  9. Lưu trữ gRPC trong các dự án không phải ASP.NET Core
  10. Tài nguyên bổ sung

Do việc triển khai ngăn xếp cơ bản, không phải tất cả các tính năng đều hoạt động theo cách giống nhau giữa các ứng dụng gRPC dựa trên C-core và gRPC cho .NET. Tài liệu này nêu bật những khác biệt chính trong việc di chuyển giữa hai ngăn xếp.

Quan trọng

gRPC C-core đang ở chế độ bảo trì và sẽ không được dùng nữa để thay thế bằng gRPC cho .NET. gRPC C-core không được khuyến nghị cho các ứng dụng mới.

Hỗ trợ nền tảng

gRPC C-core và gRPC cho .NET có hỗ trợ nền tảng khác nhau:

  • gRPC C-core: Triển khai gRPC C++ với các ngăn xếp TLS và HTTP/2 riêng. Gói Grpc.Core là một trình bao bọc .NET xung quanh lõi C của gRPC và chứa máy khách và máy chủ gRPC. Nó hỗ trợ .NET Framework, .NET Core và .NET 5 trở lên.
  • gRPC cho .NET: Được thiết kế cho .NET Core 3.x và .NET 5 trở lên. Nó sử dụng các ngăn xếp TLS và HTTP/2 được tích hợp trong các bản phát hành .NET hiện đại. Gói Grpc.AspNetCore chứa máy chủ gRPC được lưu trữ trong ASP.NET Core và yêu cầu .NET Core 3.x hoặc .NET 5 trở lên. Gói Grpc.Net.Client chứa một máy khách gRPC. Máy khách trong Grpc.Net.Client có hỗ trợ hạn chế cho .NET Framework bằng WinHttpHandler.

Để biết thêm thông tin, hãy xem gRPC trên nền tảng được hỗ trợ .NET.

Cấu hình máy chủ và kênh

Các gói, cấu hình và mã khởi động NuGet phải được sửa đổi khi di chuyển (migrate) từ gRPC C-Core sang gRPC cho .NET.

gRPC cho .NET có các gói NuGet riêng cho máy khách và máy chủ của nó. Các gói được thêm vào tùy thuộc vào việc ứng dụng đang lưu trữ dịch vụ gRPC hay gọi chúng:

Khi quá trình di chuyển hoàn tất, gói Grpc.Core sẽ bị xóa khỏi ứng dụng. Grpc.Core chứa các file nhị phân gốc lớn và việc xóa gói giúp giảm thời gian khôi phục NuGet và kích thước ứng dụng.

Các dịch vụ và máy khách được tạo mã

gRPC C-Core và gRPC cho .NET chia sẻ nhiều API và mã được tạo từ các file .proto tương thích với cả cách triển khai gRPC. Hầu hết máy khách và dịch vụ có thể được di chuyển từ C-Core sang gRPC cho .NET mà không cần thay đổi.

Thời gian triển khai dịch vụ gRPC

Trong ngăn xếp ASP.NET Core, theo mặc định, các dịch vụ gRPC được tạo với thời gian tồn tại trong phạm vi. Ngược lại, gRPC C-core theo mặc định liên kết với một dịch vụ có thời gian tồn tại riêng lẻ.

Vòng đời có phạm vi cho phép việc triển khai dịch vụ giải quyết các dịch vụ khác có vòng đời có phạm vi. Ví dụ: thời gian tồn tại trong phạm vi cũng có thể phân giải DbContext từ vùng chứa DI thông qua việc chèn hàm tạo. Sử dụng phạm vi thời gian tồn tại:

  • Một phiên bản mới của việc triển khai dịch vụ được xây dựng cho mỗi yêu cầu.
  • Không thể chia sẻ trạng thái giữa các yêu cầu thông qua các thành viên phiên bản trên loại triển khai.
  • Kỳ vọng là lưu trữ các trạng thái được chia sẻ trong một dịch vụ đơn lẻ trong vùng chứa DI. Các trạng thái chia sẻ được lưu trữ sẽ được giải quyết trong hàm tạo của quá trình triển khai dịch vụ gRPC.

Để biết thêm thông tin về thời gian sử dụng dịch vụ, hãy xem phần Dependency Injection trong ASP.NET Core.

Thêm một dịch vụ đơn lẻ

Để tạo điều kiện thuận lợi cho quá trình chuyển đổi từ triển khai C-core gRPC sang ASP.NET Core, có thể thay đổi thời gian tồn tại của dịch vụ khi triển khai dịch vụ từ phạm vi sang đơn lẻ. Điều này liên quan đến việc thêm một phiên bản triển khai dịch vụ vào vùng chứa DI:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
    services.AddSingleton(new GreeterService());
}

Tuy nhiên, việc triển khai dịch vụ với vòng đời đơn lẻ không còn có thể giải quyết các dịch vụ trong phạm vi thông qua việc chèn hàm tạo.

Định cấu hình tùy chọn dịch vụ gRPC

Trong các ứng dụng dựa trên C-core, các cài đặt như grpc.max_receive_message_length và grpc.max_send_message_length được định cấu hình ChannelOption khi xây dựng phiên bản Máy chủ.

Trong ASP.NET Core, gRPC cung cấp cấu hình thông qua loại GrpcServiceOptions. Ví dụ: kích thước tin nhắn đến tối đa của dịch vụ gRPC có thể được định cấu hình thông qua AddGrpc. Ví dụ sau thay đổi mặc định MaxReceiveMessageSize từ 4 MB thành 16 MB:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
    });
}

Để biết thêm thông tin về cấu hình, hãy xem gRPC dành cho cấu hình .NET.

Ghi nhật ký

Các ứng dụng dựa trên C-core dựa vào GrpcEnvironment để định cấu hình trình ghi nhật ký cho mục đích gỡ lỗi. Ngăn xếp ASP.NET Core cung cấp chức năng này thông qua API ghi nhật ký. Ví dụ: một trình ghi nhật ký có thể được thêm vào dịch vụ gRPC thông qua hàm tạo:

public class GreeterService : Greeter.GreeterBase
{
    public GreeterService(ILogger<GreeterService> logger)
    {
    }
}

Để biết thêm thông tin về ghi nhật ký và chẩn đoán gRPC, hãy xem Ghi nhật ký và chẩn đoán trong gRPC trên .NET.

HTTPS

Các ứng dụng dựa trên C-core định cấu hình HTTPS thông qua thuộc tính Server.Ports. Một khái niệm tương tự được sử dụng để định cấu hình máy chủ trong ASP.NET Core. Ví dụ: Kestrel sử dụng cấu hình điểm cuối cho chức năng này.

Trình chặn gRPC

Middleware ASP.NET Core cung cấp các chức năng tương tự so với các trình chặn trong ứng dụng gRPC dựa trên C-core. Cả hai đều được hỗ trợ bởi ứng dụng ASP.NET Core gRPC, do đó không cần phải viết lại trình chặn.

Để biết thêm thông tin về cách so sánh các tính năng này với nhau, hãy xem Trinh chặn gRPC so với Middleware.

Lưu trữ gRPC trong các dự án không phải ASP.NET Core

Máy chủ dựa C-core có thể được thêm vào bất kỳ loại dự án nào. gRPC cho máy chủ .NET yêu cầu ASP.NET Core. ASP.NET Core thường có sẵn vì tệp dự án chỉ định Microsoft.NET.SDK.Web là SDK.

Máy chủ gRPC có thể được lưu trữ trên các dự án không phải ASP.NET Core bằng cách thêm <FrameworkReference Include="Microsoft.AspNetCore.App" /> vào dự án. Tham chiếu framework làm cho API ASP.NET Core có sẵn và chúng có thể được sử dụng để khởi động máy chủ ASP.NET Core.

Để biết thêm thông tin, hãy xem Máy chủ gRPC trong các dự án không phải ASP.NET Core.

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: gRPC dành cho nhà phát triển Windows Communication Foundation (WCF)
« Trước: Test dịch vụ gRPC với Postman hoặc gRPCurl 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
Copied !!!