Jak wygenerować pliki .proto lub użyć „Code First gRPC” z klas C #?

9

Chcę używać gRPC z .NET core 3 w aplikacji sieci web asp.net core. Jak wygenerować niezbędny plik .proto z istniejących obiektów klasy C # i modeli? Nie chcę ponownie zapisywać pliku .proto, który odzwierciedla istniejący kod, chcę, aby plik .proto był automatycznie generowany z obiektów klasy i modelu.

Wywołuję tę metodę, aby zarejestrować moją klasę usług.

builder.MapGrpcService<MyGrpcService>();

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

ModelObjectma [DataContract]iz [DataMember]atrybutami zamówienia.

czy to możliwe? Każdy przykład, który widzę online, zaczyna się od .protopliku. Zdefiniowałem już pożądane metody usługi w MyGrpcServiceklasie. Ale może to tylko wstecz do tego, co jest standardowym sposobem robienia rzeczy ...

Coś w stylu starego zdalnego .NET byłoby idealne, gdy można po prostu poprosić o interfejs ze zdalnego punktu końcowego i magicznie używa się gRPCdo komunikacji tam iz powrotem, ale może to zbyt uproszczony widok.

jjxtra
źródło
Uznałem ten film za bardzo pomocny w rozpoczęciu korzystania z gRPC.
RobIII
1
Tak, „standardowym sposobem robienia rzeczy” za pomocą gRPC jest najpierw określenie specyfikacji .proto, a następnie użycie generatora kodów do utworzenia niezbędnego kodu.
phuzi
Dzięki za link do filmu, ostatnie kilka dni spędziłem na zapoznawaniu się z działaniem plików .proto i gRPC, po prostu posiadam dużą liczbę interfejsów i obiektów modelowych, które miałem nadzieję uzyskać pewne automatyczne narzędzia do pracy z ... ale być może nie ma potrzeby przepisywania opakowania i generowania plików .proto za pomocą narzędzia lub niepowodzenia ręcznego pisania plików .proto.
jjxtra,
W przypadku interakcji między C # do C # AddCodeFirstGrpc z protobuf-net.Grpc jest najlepszym rozwiązaniem. Klient może następnie uzyskać dostęp do usługi Grpc za pomocą interfejsu, adresu IP i portu za pomocą protobuf-net.Grpc. Jeśli potrzebujesz ty współdziałanie z jakiegoś innego języka wywołującego swoją usługę C # grpc można wygenerować .proto z kodu C #, zobacz stackoverflow.com/questions/1334659/... .
jjxtra

Odpowiedzi:

5

Możesz do tego użyć Marca Gravella protobuf-net.Grpc. Doświadczenie w tworzeniu kodu podczas budowania usług gRPC jest dokładnym przykładem użycia, od którego zaczął nad nim pracować. Opiera się na tym, protobuf-netco już dodaje możliwości serializacji między typami C # i protobuf.

Zapoznaj się z dokumentacją, aby dowiedzieć się, jak zacząć korzystać z biblioteki, lub nawet obejrzyj Marc'a prezentującego ten temat w jednym z następujących nagrań swojego przemówienia „Talking Between Services with gRPC and Other Tricks”:

Myślę, że faktycznie zaktualizował ten we wrześniu dla bitów wersji .NET Core 3.0, więc prawdopodobnie byłaby to bardziej zaktualizowana wersja.

Istnieje również kilka przykładów kodu, aby zobaczyć, jak to wygląda po skonfigurowaniu.

szturchać
źródło
Dzięki, będę miał zegarek, mam nadzieję, że większość z nich można zautomatyzować
jjxtra,
Film 1 godzina i 2 minuty to miejsce, w którym zaczyna najpierw mówić o kodzie
jjxtra,
Po stronie klienta wygląda idealnie, podobnie jak zdalne .NET, wciąż próbuje znaleźć miejsce, w którym konfiguruje serwer :)
jjxtra
Myślę, że najlepiej jest to sprawdzić w dokumentacji. Wyjaśnia to krok po kroku :)
poke
1
@jjxtra jest „wprowadzenie” i wszystkie przykłady z rozmów na GitHub
Marc Gravell