es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El uso de listas en gRPC en protobuf.

Tengo una List en mi servidor y quiero enviarla a mis clientes utilizando gRPC.
MyClass se ve así:

public class MyClass
{
    public long Value { get; set; }
    public DateTime Time { get; set; }
    public string Name { get; set; }
}

¿Cómo defino esta lista en protobuf y de qué forma se supone que debo anular el método generado?

Mi .proto actualmente se ve así:

syntax = "proto3";
import "google/protobuf/timestamp.proto";

service MyService {
    rpc GetValues(EmptyRequest) returns (MyResponse);
}

message EmptyRequest {
}

message MyResponse {
    repeated int64 values = 1;
    repeated google.protobuf.Timestamp time = 2;
    repeated string name = 3;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para definir List<myclass> en protobuf, puedes modificar el mensaje MyResponse en tu archivo .proto de la siguiente manera:

    message MyResponse {
      repeated MyClass values = 1;
    }
    
    message MyClass {
      int64 value = 1;
      google.protobuf.Timestamp time = 2;
      string name = 3;
    }
    

    En este mensaje modificado MyResponse, hemos reemplazado los tres campos repeated con un solo campo repeated MyClass. Luego, hemos definido el mensaje MyClass que tiene los mismos campos que la clase MyClass en C#.

    No es necesario anular ningún método generado para manejar este cambio. El generador de código gRPC generará el código necesario para manejar el mensaje MyResponse con el campo List<myclass>. Simplemente llama al método GetValues en el lado del cliente, y el código de cliente generado te dará un objeto MyResponse que contiene el campo List<myclass>.

Comments are closed.