【问题标题】:How to share gRPC proto data between client and server如何在客户端和服务器之间共享 gRPC proto 数据
【发布时间】:2019-08-10 10:59:25
【问题描述】:

我刚开始学习 gRPC,遇到了proto files 的问题,因为我知道这些文件定义了传入传出数据的模型。

在服务器端一切正常。服务器编译并运行良好,但客户端无法识别来自服务器的 proto 文件。使用 Visual Studio 2019,建议添加整个服务器作为参考。

在这一点上,我认为我走得太远了。在寻找解决方案时,我读到需要将其添加为服务参考,但 Visual Studio 2019 仅提供 WCF 和 Azure 服务。我是否需要将粘贴原型文件从服务器复制到客户端,因为查看其他“教程”我注意到复制粘贴到客户端、客户端和服务器的原型文件是 .NET Core 3.0ASP.NET Core 3.0

【问题讨论】:

  • 我确实读过“...MSBuild 以提供从 .proto 文件自动生成 C# 代码,通过在构建过程中为您运行正确的命令来提供更好的开发人员体验。”,但是如何在客户端和服务器 PS 之间共享 proto 文件。 “接下来,我们需要从我们的 .proto 服务定义中生成 gRPC 客户端和服务器接口。”这是否意味着我已经创建了第三个项目,其中包含所有原始数据的定义?
  • 没有。您可以一个项目引用另一个项目,或者您可以有一个两个项目都引用的类项目。我认为您不想在两个不同的项目中复制相同的代码。
  • 我确实不想要,我希望我可以从服务器远程读取类并在客户端用作远程类
  • 没有理由不能在共享网络驱动器上上课,因此它可以在两个位置使用。

标签: c# asp.net-core grpc


【解决方案1】:

转到您的客户端应用

  • 右键单击“依赖项”>“添加连接的服务”
  • 点击“服务参考”标签
  • 选择“添加新的 gRPC 服务引用”

在弹出窗口中指定 .proto 文件的路径并选择要生成的类的类型 - “客户端”。 现在您将拥有一个用于两个项目的 .proto 文件。

这是 Visual Studio 2019 的说明。

【讨论】:

  • 我看不到“添加新的 gRPC 服务引用”之类的内容。它需要任何额外的插件吗?
  • 不需要特殊插件。您的情况可能是 ASP.NET Core gRPC,它对与 Azure 应用服务或 IIS 一起使用有额外的要求。更多这里docs.microsoft.com/en-us/aspnet/core/grpc/…
【解决方案2】:

要考虑的另一件事是使用Code-First gRPC 方法。

以这种方式,您可以像这样在 C# 合约中编写 gRPC 消息和服务:

[DataContract]
public class HelloReply
{
    [DataMember(Order = 1)]
    public string Message { get; set; }
}

[DataContract]
public class HelloRequest
{
    [DataMember(Order = 1)]
    public string Name { get; set; }
}

[ServiceContract]
public interface IGreeterService
{
    [OperationContract]
    Task<HelloReply> SayHelloAsync(HelloRequest request,
        CallContext context = default);
}

当您知道您将在 C# 中同时使用服务器和客户端时,您可以完全跳过使用 proto。

然后,您可以使用 protobuf-net.Grpc 生成 .proto 文件,以供外部系统使用。

【讨论】:

    猜你喜欢
    • 2020-05-16
    • 2018-05-13
    • 2016-05-03
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    相关资源
    最近更新 更多