.Proto dosyalarını nasıl oluştururum veya C # sınıflarından 'Code First gRPC'yi nasıl kullanabilirim?


9

Asp.net çekirdek web uygulamasında .NET core 3 ile gRPC kullanmak istiyorum. Varolan bir C # sınıfı ve model nesnelerinden gerekli .proto dosyasını nasıl oluştururum? Varolan kodu yansıtan bir .proto dosyasını yeniden yazmak istemiyorum, .proto dosyasının sınıf ve model nesnelerinden otomatik olarak oluşturulmasını istiyorum.

Hizmet sınıfımı kaydetmek için bu yöntemi çağırıyorum.

builder.MapGrpcService<MyGrpcService>();

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

ModelObjectsahiptir [DataContract]ve [DataMember]sipariş özellikleri ile.

Mümkün mü? Çevrimiçi gördüğüm her örnek bir .protodosya ile başlar . MyGrpcServiceSınıfta istediğim hizmet yöntemlerini zaten tanımladım . Ama belki de bu, bir şeyler yapmanın standart yolunun ne olduğunun tersidir ...

Eski .NET uzaktan kumanda gibi bir şey, uzak bir uç noktadan sadece bir arayüz isteyebileceğiniz ve sihirli bir şekilde gRPCileri geri iletişim kurmak için kullandığı ideal olabilir , ancak belki de bu çok basit bir görünümdür.


Bulduğum bu videonun gRPC kullanmaya başlamanın çok yararlı.
RobIII

1
Evet, gRPC ile "bir şeyler yapmanın standart yolu" önce .proto spec belirtmek ve sonra gerekli kodu oluşturmak için bir kod üreteci kullanmaktır.
phuzi

Video bağlantısı için teşekkürler, son birkaç günü .proto dosyaları ve gRPC'nin nasıl çalıştığını tanımak için harcadım, sadece bazı otomatik takımların çalışmasını umduğum çok sayıda arabirim ve model nesnesi var ... ancak bir sarmalayıcıyı yeniden yazmak ve bir araçla .proto dosyaları oluşturmak veya .proto dosyalarını el ile yazmakta başarısız olmak gibi bir şey yoktur.
jjxtra

C # - C # birlikte çalışma için, protobuf-net.Grpc'den AddCodeFirstGrpc gitmenin yoludur. İstemci daha sonra protobuf-net.Grpc kullanarak sadece bir arayüz, ip ve port ile Grpc servisine erişebilir. C # grpc hizmetinizi çağıran başka bir dilin birlikte çalışmasına ihtiyacınız varsa, C # kodundan bir .proto oluşturabilirsiniz, bkz. Stackoverflow.com/questions/1334659/… .
jjxtra

Yanıtlar:


5

Bunun için Marc Gravell'in kullanabilirsiniz protobuf-net.Grpc. GRPC hizmetleri oluştururken ilk önce kod deneyimine sahip olmak, üzerinde çalışmaya başladığı kesin kullanım durumudur. protobuf-netZaten C # türleri ve protobuf arasında serileştirme yetenekleri ekleyen üzerine inşa edilir .

Kütüphaneyi kullanmaya nasıl başlayacağınızı görmek için belgelere bakın, hatta Marc'ın “gRPC ve Diğer Hilelerle Hizmetler Arasında Konuşma” konulu konuşmasının aşağıdaki kayıtlarından birinde bu konuyu sunmasını izleyin:

Bence aslında .NET Core 3.0'ın yayın bitleri için Eylül ayında bir güncelleme yaptı, bu yüzden muhtemelen daha güncel sürüm olacaktı.

Ayarladığınızda bunun nasıl göründüğünü görmek için birkaç kod örneği de vardır .


Teşekkürler Bir saatim olacak, umarım çoğu otomatikleştirilebilir
jjxtra

Video 1 saat 2 dakika işareti ilk kod hakkında konuşmaya başladığı yerdir
jjxtra

İstemci yan parçası, .NET uzaktan kumandası gibi mükemmel görünüyor, yine de sunucuyu nerede kurduğunu bulmaya çalışıyor :)
jjxtra

Bunun için belgelere göz atmanın en iyisi olduğunu düşünüyorum. O :) üzerinde adım adım açıklaması var
dürtmek

1
@jjxtra GitHub'da bir "başlangıç" ve görüşmelerden tüm örnekler var
Marc Gravell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.