【问题标题】:How do I generate .proto files or use 'Code First gRPC' in C#如何在 C# 中生成 .proto 文件或使用“Code First gRPC”
【发布时间】:2020-03-05 04:39:01
【问题描述】:

我想在 asp.net 核心 Web 应用程序中使用带有 .NET 的 gRPC。如何从现有的 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 来回通信,但也许这太简单了。

【问题讨论】:

  • 我发现this video 对 gRPC 入门很有帮助。
  • 是的,gRPC 的“标准做事方式”是先指定 .proto 规范,然后使用代码生成器创建必要的代码。
  • 感谢视频链接,最近几天我已经熟悉了 .proto 文件和 gRPC 的工作原理,只是有大量的接口和模型对象,我希望能得到一些使用自动工具...但也许无法绕过重写包装器并使用工具生成 .proto 文件,或者无法手动编写 .proto 文件。
  • 对于 C# 到 C# 互操作,来自 protobuf-net.Grpc 的 AddCodeFirstGrpc 是要走的路。然后,客户端可以使用 protobuf-net.Grpc 仅通过接口、ip 和端口访问 Grpc 服务。如果您需要调用 C# grpc 服务的其他语言的互操作,您可以从 C# 代码生成 .proto,请参阅stackoverflow.com/questions/1334659/…
  • 我能再问一件事吗?客户端代码是什么样的?提前致谢

标签: c# protocol-buffers grpc .net-5


【解决方案1】:

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

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

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

还有几个code samples 看看你设置它时的样子。

【讨论】:

  • 谢谢我有一块手表,希望大部分可以自动化
  • 视频 1 小时 2 分钟是他首先开始谈论代码的地方
  • 客户端看起来很完美,就像 .NET 远程处理一样,仍然试图找到他设置服务器的位置:)
  • @jjxtra 在 GitHub 上有一个“入门”和会谈中的所有示例
  • 但是问题已经存在,我们如何在 .net 中从代码优先的 grpc 创建 protobuf。供其他平台使用。
猜你喜欢
  • 2019-05-12
  • 2021-03-20
  • 2021-01-27
  • 2022-08-02
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多