如何在RPC客户端中使用_unknownFields?

时间:2019-12-14 12:55:33

标签: asp.net-core grpc

我有一个具有以下接口的RPC服务器:

syntax = "proto3";import "google/protobuf/descriptor.proto";
import "google/protobuf/empty.proto";
option csharp_namespace = "RpcVersioningClient.Services";
service MachineService {
    rpc GetCounters (google.protobuf.Empty) returns (CountersMessage);
}

message CountersMessage {
    int32 module_counter = 1;
}

假设我的客户端具有较新的版本,并且无法更新服务器。客户端在CountersMessage中有一个新字段:

syntax = "proto3";import "google/protobuf/descriptor.proto";
import "google/protobuf/empty.proto";
option csharp_namespace = "RpcVersioningClient.Services";

service MachineService {
    rpc GetCounters (google.protobuf.Empty) returns (CountersMessage);
}

message CountersMessage {
    int32 module_counter = 1;
    int32 new_module_counter = 2;
}

该字段默认为“ 0”,并且由于proto3不允许指定默认值,因此我无法使用该值来确定服务器是否支持该字段。通过分析生成的消息类,我发现有一个私有字段_unknownFields,听起来像我需要的信息。毕竟new_module_counter是服务器的已知字段。由于生成的消息类是局部类,因此我可以使用公共获取程序“ UnknownFields”创建第二个局部类。

public partial class CountersMessage
{
     public UnknownFieldSet UnknownFields => return _unknownFields;
}

不幸的是,在收到旧服务器的内容后,该字段为空。有人知道这个领域的意图吗?

我正在尝试使服务器端反射起作用以实现相同的目标。目前,我陷入困境并寻求帮助gRPC and ASP.NET Core: serverside reflection

0 个答案:

没有答案