C#クラスから.protoファイルを生成したり、「Code First gRPC」を使用するにはどうすればよいですか?


9

asp.netコアWebアプリケーションで.NETコア3とgRPCを使用したい。既存のC#クラスとモデルオブジェクトから必要な.protoファイルを生成するにはどうすればよいですか?既存のコードを反映する.protoファイルを書き直したくありません。.protoファイルをクラスおよびモデルオブジェクトから自動生成したいのですが。

このメソッドを呼び出して、サービスクラスを登録します。

builder.MapGrpcService<MyGrpcService>();

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

ModelObject[DataContract]あり[DataMember]、注文属性があります。

これは可能ですか?私がオンラインで見る例はすべて.protoファイルから始まります。MyGrpcServiceクラスで必要なサービスメソッドを既に定義しました。しかし、多分これは物事を行う標準的な方法とはちょうど逆です...

古い.NETリモート処理のようなものは、リモートエンドポイントからインターフェイスを要求するだけで理想的であり、それは魔法のように双方向のgRPC通信に使用されますが、ビューが単純すぎる可能性があります。


私が見つかりました。このビデオは gRPC入門非常に役立ちます。
RobIII

1
うん、gRPCの「標準的な方法」では、最初に.proto仕様を指定してから、コードジェネレーターを使用して必要なコードを作成します。
プージ

ビデオリンクのおかげで、.protoファイルとgRPCがどのように機能するかを理解するために過去数日間を費やしてきました。いくつかの自動ツールを機能させたいと思っていた多数のインターフェイスとモデルオブジェクトがあります...しかし、ラッパーを書き換えてツールで.protoファイルを生成したり、手動で.protoファイルを手動で書き込んだりすることに失敗することはありません。
jjxtra

C#からC#への相互運用には、protobuf-net.GrpcのAddCodeFirstGrpcが適しています。クライアントは、protobuf-net.Grpcを使用して、インターフェイス、IP、およびポートのみでGrpcサービスにアクセスできます。あなたがあなたのC#のgrpcサービスを呼び出すいくつかの他の言語の相互運用が必要な場合は、あなたが見る、C#コードから.protoを生成することができますstackoverflow.com/questions/1334659/...を
jjxtra

回答:


5

protobuf-net.Grpcこれにはマークグラベルを使用できます。gRPCサービスを構築するときにコードファーストの経験をすることが、彼がその作業に取り掛かった正確なユースケースです。これは、protobuf-netC#型とprotobuf間のシリアル化機能をすでに追加している上に構築されます。

ドキュメントをチェックして、ライブラリの使用を開始する方法を確認するか、Marcが彼の講演「gRPCと他のトリックを使用したサービス間の会話」の次の録音の1つでこのトピックを紹介するのを見てください。

彼は実際に.NET Core 3.0のリリースビット用に9月に1つを更新したので、おそらくそれがより更新されたバージョンになるでしょう。

設定したときにどのように見えるかを確認するためのコードサンプルもいくつかあります。


おかげで私は時計を手に入れます。うまくいけば、そのほとんどが自動化できるでしょう
jjxtra

ビデオ1時間2分のマークは、彼が最初にコードについて話し始めるところです
jjxtra

クライアント側の部分は、.NETリモーティングのように完璧に見えますが、サーバーを設定する場所を見つけようとします:)
jjxtra

そのためのドキュメントをチェックするのが最善だと思います。その:)上のステップバイステップの説明があります
突く

1
@jjxtra GitHub
Marc Gravell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.