Ich möchte gRPC mit .NET Core 3 in einer asp.net Core-Webanwendung verwenden. Wie generiere ich die erforderliche .proto-Datei aus einer vorhandenen C # -Klasse und Modellobjekten? Ich möchte keine .proto-Datei neu schreiben, die den vorhandenen Code widerspiegelt. Ich möchte, dass die .proto-Datei automatisch aus den Klassen- und Modellobjekten generiert wird.
Ich rufe diese Methode auf, um meine Serviceklasse zu registrieren.
builder.MapGrpcService<MyGrpcService>();
public class MyGrpcService
{
public Task<string> ServiceMethod(ModelObject model, ServerCallContext context)
{
return Task.FromResult("It Worked");
}
}
ModelObject
hat [DataContract]
und [DataMember]
mit Auftragsattributen.
Ist das möglich? Jedes Beispiel, das ich online sehe, beginnt mit einer .proto
Datei. Ich habe meine gewünschten Servicemethoden bereits in der MyGrpcService
Klasse definiert. Aber vielleicht ist dies nur rückwärts zu der üblichen Vorgehensweise ...
So etwas wie das alte .NET-Remoting ist ideal, wenn Sie einfach von einem Remote-Endpunkt aus nach einer Schnittstelle fragen können, die auf magische Weise gRPC
zum Hin- und Herkommunizieren verwendet wird, aber vielleicht ist das eine zu vereinfachte Ansicht.
quelle
Antworten:
Sie können Marc Gravell's
protobuf-net.Grpc
dafür verwenden. Eine Code-First-Erfahrung beim Erstellen von gRPC-Diensten ist der genaue Anwendungsfall, warum er damit begonnen hat, daran zu arbeiten. Darüber hinaus werdenprotobuf-net
Serialisierungsfunktionen zwischen C # -Typen und Protobuf hinzugefügt.Lesen Sie in der Dokumentation nach, wie Sie mit der Verwendung der Bibliothek beginnen können, oder sehen Sie sich sogar an, wie Marc dieses Thema in einer der folgenden Aufzeichnungen seines Vortrags „Mit gRPC und anderen Tricks zwischen Diensten sprechen“ vorstellt:
Ich denke, er hat tatsächlich die im September für die Release-Bits von .NET Core 3.0 aktualisiert, so dass dies wahrscheinlich die aktuellere Version wäre.
Es gibt auch einige Codebeispiele, um zu sehen, wie dies beim Einrichten aussieht.
quelle