I've an RPC server with this interface:

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;
}

Suppose I have a client with a newer version and it's not possible to 
update the server. The client has a new field in 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;
}

The field defaults to '0' and since proto3 doesn't allow to specify default 
values, I can't use the value to find out if the server supports the field. 
By analyzing the generated message class, I found out, that there is a 
private field _unknownFields that sounds like the information that I 
needed. After all new_module_counter is an known field for the server. 
Since the generated message class is partial, I can make a second partial 
class with public getter 'UnknownFields'.

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

Unfortunately, the field is null after receiving the contents of the older 
server. Does anybody know what is the intention of this field?

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/f0bf15aa-536e-428d-bfaa-26f5b93fd732%40googlegroups.com.

Reply via email to