Làm cách nào để tôi tạo tệp .proto hoặc sử dụng 'Code First gRPC' từ các lớp C #?


9

Tôi muốn sử dụng gRPC với .NET core 3 trong một ứng dụng web lõi asp.net. Làm cách nào để tôi tạo tệp .proto cần thiết từ một đối tượng mô hình và lớp C # hiện có? Tôi không muốn viết lại tệp .proto phản chiếu mã hiện có, tôi muốn tệp .proto được tạo tự động từ các đối tượng lớp và mô hình.

Tôi gọi phương thức này để đăng ký lớp dịch vụ của tôi.

builder.MapGrpcService<MyGrpcService>();

public class MyGrpcService
{
    public Task<string> ServiceMethod(ModelObject model, ServerCallContext context)
    {
        return Task.FromResult("It Worked");
    }
}

ModelObject[DataContract][DataMember]với các thuộc tính thứ tự.

Điều này có thể không? Mỗi ví dụ tôi thấy trực tuyến bắt đầu với một .prototập tin. Tôi đã xác định các phương thức dịch vụ mong muốn của mình trong MyGrpcServicelớp. Nhưng có lẽ điều này chỉ ngược với cách làm việc tiêu chuẩn ...

Một cái gì đó giống như điều khiển từ xa .NET cũ sẽ rất lý tưởng khi bạn chỉ cần yêu cầu giao diện từ điểm cuối từ xa và nó sử dụng một cách kỳ diệu gRPCđể liên lạc qua lại, nhưng có lẽ đó là một cách nhìn quá đơn giản.


Tôi thấy video này rất hữu ích khi bắt đầu với gRPC.
RobIII

1
Đúng, "cách làm việc tiêu chuẩn" với gRPC là trước tiên chỉ định thông số .proto và sau đó sử dụng trình tạo mã để tạo mã cần thiết.
phuzi

Cảm ơn liên kết video, tôi đã dành vài ngày qua để làm quen với cách các tệp .proto và gRPC hoạt động, chỉ cần có một số lượng lớn giao diện và các đối tượng mô hình mà tôi hy vọng sẽ có một số công cụ tự động hoạt động với ... nhưng có lẽ không có cách nào để viết lại một trình bao bọc và tạo các tệp .proto bằng một công cụ hoặc không tự tay viết các tệp .proto.
jjxtra

Đối với interop C # đến C #, AddCodeFirstGrpc từ protobuf-net.Grpc là cách để đi. Sau đó, khách hàng có thể truy cập dịch vụ Grpc chỉ bằng một giao diện, ip và cổng bằng cách sử dụng protobuf-net.Grpc. Nếu bạn cần xen kẽ một số ngôn ngữ khác gọi dịch vụ C # grpc của mình, bạn có thể tạo .proto từ mã C #, xem stackoverflow.com/questions/1334659/ .
jjxtra

Câu trả lời:


5

Bạn có thể sử dụng Marc Gravell protobuf-net.Grpccho việc này. Có trải nghiệm đầu tiên về mã khi xây dựng các dịch vụ gRPC là trường hợp sử dụng chính xác tại sao anh ta bắt đầu làm việc với nó. Nó được xây dựng trên protobuf-netđó đã thêm khả năng tuần tự hóa giữa các loại C # và protobuf.

Kiểm tra tài liệu để xem cách bắt đầu sử dụng thư viện, hoặc thậm chí xem Marc trình bày chủ đề này trong một trong những bản ghi sau đây về cuộc nói chuyện của anh ấy Nói chuyện giữa các dịch vụ với gRPC và các thủ thuật khác:

Tôi nghĩ rằng anh ấy thực sự đã cập nhật một bản vào tháng 9 cho các bit phát hành của .NET Core 3.0, vì vậy đó có lẽ sẽ là phiên bản cập nhật hơn.

Ngoài ra còn có một vài mẫu mã để xem nó trông như thế nào khi bạn thiết lập nó.


Cảm ơn tôi sẽ có một chiếc đồng hồ, hy vọng hầu hết nó có thể được tự động
jjxtra

Video đánh dấu 1 giờ 2 phút là nơi anh ấy bắt đầu nói về mã đầu tiên
jjxtra

Phần phía máy khách trông hoàn hảo, giống như điều khiển từ xa .NET, vẫn cố gắng tìm nơi anh ta thiết lập máy chủ :)
jjxtra

Tôi nghĩ rằng tốt nhất là kiểm tra các tài liệu cho điều đó. Có một lời giải thích từng bước về điều đó :)
chọc

1
@jjxtra có "bắt đầu" và tất cả các ví dụ từ các cuộc đàm phán, trên GitHub
Marc Gravell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.