web-dev-qa-db-fra.com

Comment générer des fichiers .proto ou utiliser «Code First gRPC» à partir de classes C #?

Je veux utiliser gRPC avec .NET core 3 dans une application web core asp.net. Comment générer le fichier .proto nécessaire à partir d'une classe C # existante et d'objets de modèle? Je ne veux pas réécrire un fichier .proto qui reflète le code existant, je veux que le fichier .proto soit généré automatiquement à partir des objets de classe et de modèle.

J'appelle cette méthode pour enregistrer ma classe de service.

builder.MapGrpcService<MyGrpcService>();

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

ModelObject a [DataContract] et [DataMember] avec des attributs de commande.

Est-ce possible? Chaque exemple que je vois en ligne commence par un .proto fichier. J'ai déjà défini mes méthodes de service souhaitées dans la classe MyGrpcService. Mais c'est peut-être juste en arrière par rapport à la façon habituelle de faire les choses ...

Quelque chose comme l'ancien accès distant .NET serait idéal où vous pouvez simplement demander une interface à partir d'un point de terminaison distant et il utilise comme par magie gRPC pour communiquer d'avant en arrière, mais c'est peut-être une vue trop simpliste.

9
jjxtra

Vous pouvez utiliser protobuf-net.Grpc de Marc Gravell pour cela. Avoir une expérience de code-premier lors de la création de services gRPC est le cas d'utilisation exact pourquoi il a commencé à travailler dessus. Il s'appuie sur protobuf-net qui ajoute déjà des capacités de sérialisation entre les types C # et protobuf.

Consultez la documentation pour voir comment commencer à utiliser la bibliothèque, ou même regardez Marc présenter ce sujet dans l'un des enregistrements suivants de son discours "Parler entre les services avec gRPC et d'autres astuces":

Je pense qu'il a en fait mis à jour celui de septembre pour les bits de sortie de .NET Core 3.0, donc ce serait probablement la version la plus mise à jour.

Il y a aussi quelques exemples de code pour voir à quoi cela ressemble lorsque vous le configurez.

4
poke