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

问题描述 投票:0回答:2

我想在 asp.net core Web 应用程序中将 gRPC 与 .NET 结合使用。如何从现有 C# 类和模型对象生成必要的 .proto 文件?我不想重写反映现有代码的 .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
来回通信,但也许这种观点过于简单化。

c# protocol-buffers grpc .net-5
2个回答
19
投票

您可以使用 Marc Gravell 的

protobuf-net.Grpc
来实现此目的。在构建 gRPC 服务时拥有代码优先的经验正是他开始研究它的具体用例。它建立在
protobuf-net
之上,它已经添加了 C# 类型和 protobuf 之间的序列化功能。

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

我认为他实际上在 9 月份更新了 .NET Core 3.0 的发布版本,因此这可能是更新较多的版本。

还有一些代码示例来看看设置后的样子。


0
投票

您可以使用 Github-Copilot 并提出以下问题:

Please convert to protobuf: "paste here your class definition"

如果课程没有那么长,Github 会做一个近乎完美的提案。将其复制并粘贴到您的原型文件中。这适用于 C# 和 C++,也可能适用于其他语言。

© www.soinside.com 2019 - 2024. All rights reserved.