如何在 C# 中生成 .proto 文件或使用 'Code First gRPC'

How do I generate .proto files or use 'Code First gRPC' in C#

我想在 asp.net 核心 Web 应用程序中将 gRPC 与 .NET 结合使用。如何从现有的 C# class 和模型对象生成必要的 .proto 文件?我不想重新编写反映现有代码的 .proto 文件,我希望从 class 和模型对象自动生成 .proto 文件。

我调用这个方法来注册我的服务class。

builder.MapGrpcService<MyGrpcService>();

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

ModelObject 具有 [DataContract][DataMember] 订单属性。

这可能吗?我在网上看到的每个示例都以 .proto 文件开头。我已经在 MyGrpcService class 中定义了我想要的服务方法。但也许这只是倒退到标准的做事方式......

像旧的 .NET 远程处理这样的东西是理想的,你可以从远程端点请求一个接口,它神奇地使用 gRPC 来回通信,但也许这太简单了查看。

您可以使用 Marc Gravell 的 protobuf-net.Grpc for this. Having a code-first experience when building gRPC services is the exact use case why he started working on it. It builds on top of protobuf-net,它已经在 C# 类型和 protobuf 之间添加了序列化功能。

查看 documentation 以了解如何开始使用该库,甚至观看 Marc 在他的演讲“使用 gRPC 和其他技巧在服务之间交谈”的以下录音之一中介绍该主题:

我认为他实际上在 9 月份更新了 .NET Core 3.0 的发布位,所以那可能是更新的版本。

还有一些 code samples 可以查看设置后的效果。