Як генерувати .proto файли або використовувати "Code First gRPC" з класів C #?


9

Я хочу використовувати gRPC з .NET core 3 в основному веб-додатку asp.net. Як створити необхідний файл .proto з існуючих об'єктів класу C # та моделі? Я не хочу переписувати .proto файл, який відображає наявний код, я хочу, щоб файл .proto був автоматично створений з об’єктів класу та моделі.

Я називаю цей метод, щоб зареєструвати мій клас обслуговування.

builder.MapGrpcService<MyGrpcService>();

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

ModelObjectмає [DataContract]і [DataMember]з атрибутами замовлення.

Чи можливо це? Кожен приклад, який я бачу в Інтернеті, починається з .protoфайлу. Я вже визначив бажані методи обслуговування в MyGrpcServiceкласі. Але, можливо, це просто назад до того, що є стандартним способом вчинків ...

Щось на зразок старого .NET віддалення було б ідеальним, коли ви можете просто попросити інтерфейс від віддаленої кінцевої точки, і він магічно використовує gRPCдля зв'язку вперед і назад, але, можливо, це занадто спрощений погляд.


Я знайшов це відео дуже корисним для початку роботи з gRPC.
RobIII

1
Так, "стандартний спосіб робити речі" з gRPC - це спочатку вказати специфікацію .proto, а потім використовувати генератор коду для створення необхідного коду.
фузі

Дякую за відеопосилання, я вже кілька днів ознайомився з тим, як працюють файли .proto та gRPC, просто є велика кількість інтерфейсів та модельних об’єктів, з якими я сподівався отримати деякі інструменти автоматичного інструментарію, з якими працюю ... але, можливо, не існує можливості переписувати обгортку та генерувати файли .proto інструментом або не вдається вручну записати файли .proto.
jjxtra

Для C # до C # interop, AddCodeFirstGrpc від protobuf-net.Grpc - це шлях. Потім клієнт може отримати доступ до послуги Grpc лише за допомогою інтерфейсу, ip та порту за допомогою протобуфа-net.Grpc. Якщо вам потрібен інтероп іншої мови, який викликає вашу послугу C # grpc, ви можете створити .proto з коду C #, див. Stackoverflow.com/questions/1334659/… .
jjxtra

Відповіді:


5

Ви можете використовувати protobuf-net.Grpcдля цього Марка Гравелла . Маючи досвід використання коду під час створення служб gRPC, це саме той випадок використання, чому він почав працювати над ним. Він ґрунтується на тому, protobuf-netщо вже додає можливості серіалізації між типами C # та протобуфами.

Перегляньте документацію, щоб побачити, як почати користуватися бібліотекою, або навіть дивіться, як Марк представляє цю тему в одному з наступних записів своєї бесіди «Розмова між службами з gRPC та іншими хитрощами»:

Я думаю, що він фактично оновив цей у вересні для випусків бітів .NET Core 3.0, так що, мабуть, це буде більш оновлена ​​версія.

Існує також кілька зразків коду, щоб побачити, як це виглядає під час його налаштування.


Дякую, у мене буде годинник, сподіваюся, більшість його можна автоматизувати
jjxtra

Відео 1 година та 2 хвилина позначки - це те, коли він починає говорити про код спочатку
jjxtra

Клієнтська частина виглядає ідеально, як і .NET видалення, все ще намагаючись знайти, де він налаштовує сервер :)
jjxtra

Я думаю, що найкраще перевірити документацію на це. На цьому є покрокове пояснення :)
ткнути

1
@jjxtra є "початок роботи" і всі приклади з переговорів, на GitHub
Marc Gravell
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.