微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C# 中为 gRPC 创建正确的自动生成代码?

如何解决如何在 C# 中为 gRPC 创建正确的自动生成代码?

我在 C# 项目中创建了一个 proto 文件,并尝试通过构建解决方案来自动生成 C# 代码。 但是,扩展名 grpc.cs 下的文件有问题。

''' 

/// <summary>Creates a new client for Greeter</summary>
   /// <param name="channel">The channel to use to make remote calls.</param>
      public GreeterClient(grpc::Channel channel) : base(channel)
      {
      }

'''

上面的片段来自示例,其中公共 GreeterClient 具有参数 (grpc::Channel channel) 但在下面的片段中,它是 (grpc::ChannelBase channel)

'''

/// <summary>Creates a new client for samples</summary>
/// <param name="channel">The channel to use to make remote calls.</param>
public samplesClient(grpc::ChannelBase channel) : base(channel)
{
}

'''

这会引发一个错误,告诉'找不到客户端频道

如何配置生成grpc.cs文件,使参数为(grpc::Channel channel)

解决方法

我不确定你在做什么(...试图自动生成...

这是 .NET Framework 项目的示例,.NET Core 创建的略有不同 - 这是 .NET Core 入门的绝佳资源:ASP.NET Core gRPC for WCF Developers

通常你做什么

  1. 创建项目并安装相关的 Nuget 包:GrpcGrpc.Core 以及最重要的 Grpc.Tools
  2. 添加新文件。随意命名,但扩展名必须是 .proto
  3. 在这个 proto 文件中填充一些数据,例如:
syntax = "proto3";

option csharp_namespace = "MyNamespace";

...
...
  1. 右键单击此文件并选择 Properties
  2. 在“属性”面板中,选择 Protobuf 作为 Build action。所以它应该是这样的:

enter image description here

  1. 重新构建解决方案
  2. 添加另一个 C# 文件,随意命名
  3. 在此 C# 文件中,开始引用您在 proto 文件中创建的结构。喜欢:

MyNamespace.MyServer server = new MyNamespace.MyServer()

但实际上您应该从 ptotobuf 为您创建的基类继承,如下所示:

 public class GrpcImplementationClass: MyNamespace.MyServer.MyServerBase
 {

   public override MyFunction()
   {
   ...
   ...

附言Youtube

上有很多针对初学者的教程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。