gRPC函数是否有可能重载?

c#

我正在用 C# 中的 gRPC 开始一个小示例项目,当我实现 proto 文件时,当我输入相同名称的函数但不同的参数时,我会收到一些错误。

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

回答

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

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

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

service Math {
  rpc Add (AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 x = 1;
  int32 y = 2;
}

message AddResponse {
  int32 result;
}
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)
    {
        ...
    }
}


以上是gRPC函数是否有可能重载?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>