Как мне создать .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для связи назад и вперед, но, возможно, это слишком упрощенное представление.

jjxtra
источник
Я нашел это видео очень полезным для начала работы с gRPC.
RobIII
1
Да, «стандартный способ работы» с gRPC - сначала указать спецификацию .proto, а затем использовать генератор кода для создания необходимого кода.
Phuzi
Спасибо за ссылку на видео, я уже провел последние несколько дней, знакомясь с тем, как работают файлы .proto и gRPC, просто у меня есть большое количество интерфейсов и объектов модели, с которыми я надеялся получить автоинструмент для работы ... но, возможно, нет смысла переписывать оболочку и генерировать файлы .proto с помощью инструмента, или не удается вручную написать файлы .proto.
Jjxtra
Для взаимодействия между C # и C # добавьте AddCodeFirstGrpc из protobuf-net.Grpc. Затем клиент может получить доступ к сервису Grpc только через интерфейс, ip и порт, используя protobuf-net.Grpc. Если вам нужно Interop какого - то другого языка , призывающего к вашим услугам # КПГР C, вы можете создать .proto из C # код, см stackoverflow.com/questions/1334659/... .
Jjxtra

Ответы:

5

Вы можете использовать Марк Гравелл protobuf-net.Grpcдля этого. Опыт создания кода при создании сервисов gRPC - это именно тот случай, когда он начал работать над ним. Он основан на том, protobuf-netчто уже добавляет возможности сериализации между типами C # и protobuf.

Ознакомьтесь с документацией, чтобы узнать, как начать использовать библиотеку, или даже посмотрите, как Марк представил эту тему в одной из следующих записей своего выступления «Разговор между службами с gRPC и другими приемами»:

Я думаю, что он на самом деле обновил выпущенный в сентябре выпуск .NET Core 3.0, так что это, вероятно, будет более обновленная версия.

Есть также несколько примеров кода, чтобы увидеть, как это выглядит при настройке.

совать
источник
Спасибо, у меня будут часы, надеюсь, большинство из них можно будет автоматизировать
jjxtra
Видео 1 час и 2 минуты - это то место, где он впервые начинает говорить о коде
jjxtra
Часть на стороне клиента выглядит идеально, так же как удаленное взаимодействие .NET, все еще пытаясь найти, где он настраивает сервер :)
jjxtra
Я думаю, что лучше проверить документацию для этого. Существует шаг за шагом объяснение этого :)
совать
1
@jjxtra есть «начало работы» и все примеры из переговоров на GitHub
Марк Грэвелл