Bagaimana cara menghasilkan file .proto atau menggunakan 'Code First gRPC' dari kelas C #?

9

Saya ingin menggunakan gRPC dengan .NET core 3 dalam aplikasi web inti asp.net. Bagaimana cara menghasilkan file .proto yang diperlukan dari objek kelas C # dan model yang ada? Saya tidak ingin menulis ulang file .proto yang mencerminkan kode yang ada, saya ingin file .proto dihasilkan secara otomatis dari objek kelas dan model.

Saya memanggil metode ini untuk mendaftarkan kelas layanan saya.

builder.MapGrpcService<MyGrpcService>();

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

ModelObjectmemiliki [DataContract]dan [DataMember]dengan atribut pesanan.

Apakah ini mungkin? Setiap contoh yang saya lihat online dimulai dengan .protofile. Saya sudah mendefinisikan metode layanan yang saya inginkan di MyGrpcServicekelas. Tapi mungkin ini hanya mundur ke apa cara standar dalam melakukan sesuatu ...

Sesuatu seperti remoting NET lama. Akan ideal di mana Anda hanya bisa meminta antarmuka dari titik akhir jarak jauh dan secara ajaib digunakan gRPCuntuk berkomunikasi bolak-balik, tapi mungkin itu tampilan yang terlalu sederhana.

jjxtra
sumber
Saya menemukan video ini sangat membantu dalam memulai dengan gRPC.
RobIII
1
Yap, "cara standar dalam melakukan sesuatu" dengan gRPC adalah menentukan spesifikasi .proto terlebih dahulu dan kemudian menggunakan pembuat kode untuk membuat kode yang diperlukan.
phuzi
Terima kasih atas tautan videonya, saya telah menghabiskan beberapa hari terakhir untuk membiasakan diri dengan cara kerja file .proto dan gRPC, hanya memiliki sejumlah besar antarmuka dan objek model yang saya harapkan dapat bekerja dengan perkakas otomatis ... tetapi mungkin tidak ada cara menulis ulang pembungkus dan menghasilkan file .proto dengan alat atau gagal yang secara manual menulis file .proto.
jjxtra
Untuk interop C # ke C #, AddCodeFirstGrpc dari protobuf-net.Grpc adalah jalan yang harus ditempuh. Klien kemudian dapat mengakses layanan Grpc hanya dengan antarmuka, ip dan port menggunakan protobuf-net.Grpc. Jika Anda perlu interop dari beberapa bahasa lain yang memanggil layanan C # grpc Anda, Anda dapat membuat .proto dari kode C #, lihat stackoverflow.com/questions/1334659/… .
jjxtra

Jawaban:

5

Anda dapat menggunakan Marc Gravell's protobuf-net.Grpcuntuk ini. Memiliki pengalaman kode-pertama ketika membangun layanan gRPC adalah kasus penggunaan yang tepat mengapa ia mulai bekerja di sana. Itu dibangun di atas protobuf-netyang sudah menambahkan kemampuan serialisasi antara tipe C # dan protobuf.

Lihatlah dokumentasi untuk melihat bagaimana memulai menggunakan perpustakaan, atau bahkan menonton Marc mempresentasikan topik ini di salah satu rekaman ceramahnya berikut ini "Berbicara Antara Layanan dengan gRPC dan Trik Lain":

Saya pikir dia benar-benar memperbarui yang pada bulan September untuk bit rilis. NET Core 3.0, sehingga mungkin akan menjadi versi yang lebih diperbarui.

Ada juga beberapa contoh kode untuk melihat bagaimana ini terlihat ketika Anda mengaturnya.

menyodok
sumber
Terima kasih saya akan memiliki arloji, semoga sebagian besar dapat diotomatisasi
jjxtra
Video 1 jam 2 menit ditandai di mana ia mulai berbicara tentang kode pertama
jjxtra
Sepotong sisi klien terlihat sempurna, seperti .NET remoting, masih berusaha untuk menemukan di mana ia mengatur server :)
jjxtra
Saya pikir yang terbaik adalah memeriksa dokumentasi untuk itu. Ada penjelasan langkah demi langkah tentang hal itu :)
menyodok
1
@jjxtra ada "persiapan" dan semua contoh dari pembicaraan, di GitHub
Marc Gravell