Come posso generare file .proto o usare 'Code First gRPC' dalle classi C #?


9

Voglio usare gRPC con .NET core 3 in un'applicazione web core asp.net. Come posso generare il file .proto necessario da una classe C # esistente e oggetti modello? Non voglio riscrivere un file .proto che rispecchi il codice esistente, voglio che il file .proto sia generato automaticamente dagli oggetti della classe e del modello.

Chiamo questo metodo per registrare la mia classe di servizio.

builder.MapGrpcService<MyGrpcService>();

public class MyGrpcService
{
    public Task<string> ServiceMethod(ModelObject model, ServerCallContext context)
    {
        return Task.FromResult("It Worked");
    }
}

ModelObjectha [DataContract]e [DataMember]con attributi di ordine.

È possibile? Ogni esempio che vedo online inizia con un .protofile. Ho già definito i miei metodi di servizio desiderati in MyGrpcServiceclasse. Ma forse questo è solo all'indietro rispetto a qual è il modo standard di fare le cose ...

Qualcosa come il vecchio remoting .NET sarebbe l'ideale in cui puoi semplicemente chiedere un'interfaccia da un endpoint remoto e magicamente usa gRPCper comunicare avanti e indietro, ma forse è una vista troppo semplicistica.


Ho trovato questo video molto utile per iniziare con gRPC.
RobIII

1
Sì, il "modo standard di fare le cose" con gRPC è di specificare prima le specifiche .proto e quindi utilizzare un generatore di codice per creare il codice necessario.
phuzi,

Grazie per il collegamento video, ho già trascorso gli ultimi giorni a familiarizzare con il funzionamento dei file .proto e gRPC, ho solo un gran numero di interfacce e oggetti modello che speravo di ottenere un po 'di auto-tooling con ... ma forse non c'è modo di riscrivere riscrivendo un wrapper e generare file .proto con uno strumento o fallire quella mano che scrive manualmente i file .proto.
jjxtra,

Per l'interoperabilità da C # a C #, AddCodeFirstGrpc da protobuf-net.Grpc è la strada da percorrere. Il client può quindi accedere al servizio Grpc con solo un'interfaccia, ip e porta usando protobuf-net.Grpc. Se hai bisogno di interoperare con un'altra lingua per chiamare il tuo servizio grpc C #, puoi generare un .proto dal codice C #, vedi stackoverflow.com/questions/1334659/… .
jjxtra,

Risposte:


5

Puoi usare Marc Gravell protobuf-net.Grpcper questo. Avere un'esperienza di prim'ordine nella creazione di servizi gRPC è l'esatto caso d'uso per cui ha iniziato a lavorarci. Si basa su protobuf-netquale già aggiunge funzionalità di serializzazione tra tipi C # e protobuf.

Consulta la documentazione per scoprire come iniziare a utilizzare la libreria o guarda Marc che presenta questo argomento in una delle seguenti registrazioni del suo discorso "Talking Between Services with gRPC and Other Tricks":

Penso che abbia effettivamente aggiornato quello di settembre per i bit di rilascio di .NET Core 3.0, quindi probabilmente sarebbe la versione più aggiornata.

Ci sono anche alcuni esempi di codice per vedere come appare quando lo configuri.


Grazie avrò un orologio, spero che la maggior parte possa essere automatizzata
jjxtra

Il video di 1 ora e 2 minuti è il punto in cui inizia a parlare del codice per primo
jjxtra

Il lato client sembra perfetto, proprio come .NET remoting, ancora cercando di trovare dove ha installato il server :)
jjxtra

Penso che sia meglio controllare la documentazione per questo. C'è una spiegazione dettagliata su questo :)
colpì l'

1
@jjxtra c'è un "inizio" e tutti gli esempi dei colloqui su GitHub
Marc Gravell
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.