1. Genel Bakış
gRPC, Google'da geliştirilen, dilden ve platformdan bağımsız bir uzak prosedür çağrısı (RPC) çerçevesi ve araç setidir. Özellikle güçlü bir ikili serileştirme araç seti ve dil olan Protokol Arabellekleri'ni kullanarak bir hizmet tanımlamanıza olanak tanır. Ardından, hizmet tanımınızdan çeşitli dillerde deyimsel istemci ve sunucu saplamaları oluşturmanıza olanak tanır.
Bu codelab'de, gRPC çerçevesini kullanarak API sunan bir C# hizmeti oluşturmayı öğreneceksiniz. Bu hizmetle, hizmetle aynı hizmet açıklamasını kullanan C# dilinde yazılmış bir konsol istemcisi aracılığıyla etkileşim kurarsınız.
Neler öğreneceksiniz?
- Protokol arabelleği dili.
- C# kullanarak gRPC hizmeti uygulama
- C# kullanarak gRPC istemcisi uygulama
- gRPC hizmeti nasıl güncellenir?
İhtiyacınız olanlar
- Chrome veya Firefox gibi bir tarayıcı
- Visual Studio 2013 veya sonraki bir sürümün yüklü olması gerekir.
- .NET Framework ve C# dili hakkında bilgi sahibi olmak.
Bu eğitimi nasıl kullanacaksınız?
Google Cloud Platform deneyiminizi nasıl değerlendirirsiniz?
2. gRPC C# örneklerini indirip derleme
Örnekleri indirme
gRPC C# örneği deposunu ZIP dosyası olarak indirip ayıklayın.
Alternatif olarak, git deposunu klonlayabilirsiniz.
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
Her iki durumda da aşağıdaki içeriklerin bulunduğu bir grpc-samples-dotnet klasörünüz olmalıdır:

Çözümü oluşturma
Örnek uygulama klasörü, Visual Studio çözümü olan GrpcSamples.sln içerir. Çözümü Visual Studio'da açmak için çift tıklayın. Bir dizi projenin yer aldığı bir çözüm görmelisiniz.

Projeleri bir sonraki bölümde daha ayrıntılı olarak inceleyeceğiz ancak önce projeyi oluşturalım. Çözümü oluşturmak için Build > Build Solution veya Ctrl + Shift + B adresine gidin. Bu işlem, tüm bağımlılıkları NuGet'ten indirir ve ardından uygulamayı derler.
Sonunda, Visual Studio konsol çıkışında bir Build succeeded mesajı görmeniz gerekir.
3. Greeter örneğini keşfedin
Greeter, istemcinin ad içeren bir istek gönderdiği ve sunucunun adla birlikte bir mesajla yanıt verdiği basit bir gRPC örneğidir. İstemcinin ve sunucunun temel aldığı ortak hizmet tanımını (proto dosyası) içeren bir Greeter projesi vardır.
Greeter Project
Bu, istemci ile sunucu arasında paylaşılan ortak projedir. İstemci ve sunucunun kullandığı gRPC hizmet tanımı olan greeter.proto içerir. Hizmet tanımı, GreetingService adlı bir gRPC hizmetini tanımlar. Bu hizmetin, giriş olarak HelloRequest ve çıkış olarak HelloResponse alan bir greeting yöntemi vardır.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
Bu, istemcinin tek bir istek gönderdiği ve sunucudan tek bir yanıt aldığı tekli (yani akışsız) bir yöntemdir. greeter.proto. içeriğinin geri kalanını inceleyebilirsiniz. Bu projede, proto dosyasından istemci ve sunucu saplamaları oluşturmak için kullanılabilecek generate_protos.bat adlı bir komut dosyası da vardır. Proje zaten oluşturulmuş istemci ve sunucu saplarını içerdiğinden bunları kendiniz oluşturmanız gerekmez. Ancak hizmet tanımı dosyasında bir değişiklik yaparsanız sapları yeniden oluşturmak için bu komut dosyasını çalıştırmanız gerekir.
Greeter Server
Bu, gRPC sunucusunun projesidir. Program.cs, bağlantı noktasının ve sunucu uygulamasının ayarlandığı ana giriş noktasıdır. Önemli sınıf GreeterServiceImpl.cs'dır. Gerçek işlevin uygulandığı bir greeting yöntemi vardır.
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
Greeter Client
Bu, gRPC hizmetinin istemci tarafıdır. Ayrıca giriş noktası olarak Program.cs simgesini de içerir. Sunucuyla iletişim kurmak için bir kanal oluşturur ve ardından oluşturulan kaba kodla kanalı olan bir istemci oluşturur. Ardından bir istek oluşturur ve istemci kaba kodunu kullanarak sunucuya gönderir.
4. Karşılama mesajı örneğini çalıştırma
Öncelikle Greeter Server'ı başlatın. Bir komut istemi açın, Greeter Server'ın bin > Debug klasörüne gidin ve yürütülebilir dosyayı çalıştırın. Sunucunun dinlediğini görmeniz gerekir.
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
Ardından, Greeter istemcisini çalıştırın. Ayrı bir komut isteminde Greeter Server'ın bin > Debug klasörüne gidin ve çalıştırılabilir dosyayı çalıştırın. İsteği gönderen istemciyi ve sunucudan yanıt aldığını görmelisiniz.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...
5. Greeter örneğini güncelleme
Hizmetimizi güncellemenin nasıl göründüğüne bakalım. gRPC hizmetimize, istemciye merhaba yerine güle güle yanıtını döndüren goodbye adlı yeni bir yöntem ekleyin.
İlk adım, hizmet tanımı dosyasını güncellemek greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
Ardından, istemci ve sunucu taslaklarını yeniden oluşturmanız gerekir. Komut isteminde generate_protos.bat komutunu çalıştırın. Saplar oluşturulduktan sonra güncellenen kodu almak için Visual Studio projelerinizi yenilemeniz gerekebilir.
Son olarak, yeni yöntemden yararlanmak için istemci ve sunucu kodunu güncelleyin. Hizmette GreeterServiceImpl.cs öğesini güncelleyin ve yeni bir goodbye yöntemi ekleyin.
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
İstemcide, Program.cs. içindeki goodbye yöntemini çağırın.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
Projeyi yeniden oluşturun ve sunucu ile istemciyi tekrar çalıştırın. Artık istemcinin bir veda mesajı aldığını görmeniz gerekir.
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...
6. Chat örneğini keşfetme
Çözümde ChatServer ve ChatWindowsClient projeleri de vardır. Adından da anlaşılacağı gibi bu, basit bir sohbet uygulaması için istemci ve sunucu çiftidir. Chat projesinde chat.proto adlı hizmet tanımı dosyası bulunur. chat yöntemiyle bir ChatService tanımlar.
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
Burada önemli olan, hem gelen hem de giden sohbet mesajlarının stream anahtar kelimesiyle işaretlenmesidir. Bu, bağlantıyı temelde istemcinin ve sunucunun birbirine istediği zaman mesaj gönderebileceği iki yönlü bir akışa dönüştürür. Bu, sohbet uygulamaları için mükemmel bir çözümdür.
Örneği daha ayrıntılı inceleyebilir, bir alıştırma olarak nasıl çalıştığını görmek için oluşturup çalıştırabilirsiniz.
7. Tebrikler!
İşlediğimiz konular
- Protokol Arabelleği Dili.
- C# kullanarak gRPC hizmeti uygulama
- C# kullanarak gRPC istemcisi uygulama
- gRPC hizmeti nasıl güncellenir?
Sonraki Adımlar
- Google Cloud Platform'da Windows hakkında daha fazla bilgi edinin.
- Google Cloud Platform'da.NET hakkında daha fazla bilgi edinin.
- Cloud Tools for Visual Studio hakkında daha fazla bilgi edinin.