【问题标题】:is it possible the gRPC functions overloading?gRPC 函数是否可能重载?
【发布时间】:2020-11-27 09:13:24
【问题描述】:

我正在使用 C# 中的 gRPC 启动一个小型示例项目,当我实现 proto 文件时,当我键入相同名称的函数但不同的参数时会出现一些错误。

我可以在 proto 文件中重载函数吗?

【问题讨论】:

    标签: c# grpc


    【解决方案1】:

    不,protobuf 中服务中的 RPC 名称必须是唯一的。

    实现有点像重载的最简单方法是使用单一请求类型和单一响应类型,但在顶层使用oneof 来指定一个“子请求”或“子响应”。然后,您可以非常轻松地在 C# 代码中创建另一个部分类并在其中编写重载,这基本上从子请求消息中适当地创建请求,然后提取适当的子响应。

    或者,如果您的 RPC 真的只想做一件事,而您只是想让以不同的方式调用更容易(这是最合适的重载形式),那么您可以只是 em> 添加部分类。例如,如果您有这样的服务:

    service Math {
      rpc Add (AddRequest) returns (AddResponse) {}
    }
    
    message AddRequest {
      int32 x = 1;
      int32 y = 2;
    }
    
    message AddResponse {
      int32 result;
    }
    

    ...如果生成的代码如下所示:

    public partial class MathClient
    {
        public virtual AddResponse Add(AddRequest request, CallOptions options)
        {
            ...
        }
    
        public virtual AsyncUnaryCall<AddResponse> AddAsync(AddRequest request, 
            headers = null, DateTime? deadline = null,
            CancellationToken cancellationToken = default)
        {
            ...
        }
    
        public virtual AsyncUnaryCall<AddResponse> AddAsync(
            AddRequest request, CallOptions options)
        {
            ...
        }
    }
    

    ...那么您可以像这样编写自己的部分类:

    public partial class MathClient
    {
        public int Add(int x, int y)
        {
            var request = new AddRequest { X = x, Y = y };
            var response = Add(request);
            return response.Result;
        }
    
        // Similarly for async
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多