如何从C#类生成.proto文件或使用“代码优先gRPC”?


9

我想在ASP.NET Core Web应用程序中将gRPC与.NET Core 3一起使用。如何从现有的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来回通信,但这也许太简单了。


我发现该视频对于gRPC入门非常有帮助。
RobIII

1
是的,使用gRPC的“标准方法”是先指定.proto规范,然后使用代码生成器来创建必要的代码。
phuzi

感谢您的视频链接,最近几天我已经花了很长时间熟悉.proto文件和gRPC的工作原理,只是拥有大量的接口和模型对象,我希望可以使用一些自动工具...但是也许无法解决使用工具重写包装器和生成.proto文件的问题,或者无法手动编写.proto文件。
jjxtra

对于C#到C#互操作,protobuf-net.Grpc的AddCodeFirstGrpc是必经之路。然后,客户端可以使用protobuf-net.Grpc仅通过接口,ip和端口访问Grpc服务。如果您需要互操作的其他语言调用C#grpc服务,则可以从C#代码生成.proto,请参见stackoverflow.com/questions/1334659/…
jjxtra

Answers:


5

您可以protobuf-net.Grpc为此使用Marc Gravell 。在构建gRPC服务时具有代码优先的经验就是他开始从事gRPC服务的确切用例。它建立在protobuf-net此基础之上,已经在C#类型和protobuf之间添加了序列化功能。

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

我认为他实际上是在9月针对.NET Core 3.0的发布版本进行了更新,因此可能是更新后的版本。

还有一些代码示例,以查看设置时的外观。


谢谢,我将有一块手表,希望其中的大部分手表都可以自动化
jjxtra

1小时2分钟的视频是他首先开始谈论代码的地方
jjxtra

客户端看起来很完美,就像.NET远程处理一样,仍然试图找到他在哪里设置服务器:)
jjxtra

我认为最好查看该文档。有一个逐步的解释:)

1
@jjxtra,有一个“入门”,所有演讲的例子,在GitHub上
Marc Gravell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.