gRPC – Unary Yöntemiyle Client ve Server İletişimi
Merhaba,
Bir önceki gRPC’de Client ve Server Uygulamaları, Proto Dosyası ve Servislerin Oluşturulması başlıklı makalemizde gRPC üzerine pratikte uzun ve detaylı bir incelemede bulunmuştuk. Bu içeriğimizde ise iki uygulama arasında iletişimin gRPC üzerinden Unary yöntemiyle nasıl sağlandığını pratikte inceliyor olacağız.
İlk olarak Unary yönteminin ne olduğunu hatırlayarak başlayalım.

Client’ın server’a tek bir istek gönderdiği ve normal bir işlev çağrısı gibi tek bir yanıt geri aldığı RPC türüdür.
Şimdi gelin, bu yöntem ile bir client ve server çalışması sergileyelim.
Proto Dosyası
Client ve server olmak üzere her iki uygulama arasındaki kontratı aşağıdaki message.proto dosyası üzerinden sağlayacağız.
syntax = "proto3"; option csharp_namespace = "gRPCExample"; package message; service Message { rpc GetMessage(MessageRequest) returns (MessageResponse); } message MessageRequest { string message = 1; } message MessageResponse { string message = 1; }
Yukarıdaki message.proto içeriğine göz atarsanız eğer içerisinde ‘GetMessage’ isimli fonksiyon barındıran ‘Message’ isimli bir servis oluşturulmaktadır. İlgili fonksiyon yapılacak request neticesinde bir ‘MessageRequest’ nesnesi istemekte ve response olarak geriye ‘MessageResponse’ değeri döndürmektedir.
Server’da Message Service’i
Client’tan gelecek olan isteği server’da karşılayacak olan ‘MessageService’i aşağıdaki gibi tasarlayalım.
public class MessageService : MessageBase { public async override Task<MessageResponse> GetMessage(MessageRequest request, ServerCallContext context) { Console.WriteLine($"Mesaj alınmıştır."); Console.WriteLine("Gelen mesaj : "); Console.WriteLine(request.Message); return new MessageResponse { Message = "İstek alındı ve işlendi..." }; } }
Yukarıdaki servis detayını incelerseniz eğer kullanılan Unary yöntemine uygun olacak şekilde gelen request’e karşılık tek bir response dönülmektedir.
Client
İstek gönderecek client’ın aşağıdaki gibi geliştirilmesi yeterli olacaktır;
class Program { static async Task Main(string[] args) { while (true) { var channel = GrpcChannel.ForAddress("https://localhost:5001"); var messageClient = new Message.MessageClient(channel); Console.WriteLine("Lütfen gönderilecek mesajı giriniz."); var messageResponse = await messageClient.GetMessageAsync(new MessageRequest { Message = Console.ReadLine() }); Console.WriteLine($"Gelen Cevap : {messageResponse.Message}"); } } }
Dikkat ederseniz client yine kullanılan Unary yöntemine uygun olacak şekilde tek bir istekte bulunmaktadır.
Test Edelim
Görüldüğü üzere Unary yöntemiyle client ve server arasında başarıyla iletişim kurulabilmektedir.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…
Not : Örnek projeleri indirebilmek için aşağıdaki adreslere tıklayınız.
gRPCClientExample
gRPCServerExample