.NET üzerinde gRPC'ye genel bakış
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Yayınlayan James Newton-King
gRPC dilden bağımsız, yüksek performanslı bir Uzaktan Yordam Çağrısı (RPC) çerçevesidir.
gRPC’nin başlıca avantajları şunlardır:
- Modern, yüksek performanslı, hafif RPC çerçevesi.
- Varsayılan olarak Protokol Arabellekleri kullanan, dilden bağımsız uygulamalara olanak veren Sözleşme öncelikli API geliştirme.
- Kesin tür belirtilmiş sunucular ve istemciler oluşturmak için çok sayıda dilde kullanılabilen araçlar.
- İstemci, sunucu ve iki yönlü akış çağrılarına yönelik destek.
- Protobuf ikili serileştirme ile azaltılmış ağ kullanımı.
Bu avantajlar, gRPC'nin aşağıdakiler için ideal olmasını sağlar:
- Verimliliğin kritik olduğu basit mikro hizmetler.
- Geliştirme için birden çok dilin gerekli olduğu çok teknolojili sistemler.
- Akış isteklerini veya yanıtlarını işlemesi gereken noktadan noktaya gerçek zamanlı hizmetler.
.proto
dosyaları için C# Araç desteği
gRPC, API geliştirme için sözleşme öncelikli bir yaklaşım kullanır. Hizmetler ve iletiler .proto
dosyalarında tanımlanır:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Hizmetler, istemciler ve iletiler için .NET türleri, .proto
dosyaları projeye eklenerek otomatik olarak oluşturulur:
- Grpc.Tools paketine paket başvurusu ekleme.
<Protobuf>
öğe grubuna.proto
dosyası ekleme.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC araç desteği hakkında daha fazla bilgi için, bkz. C# ile gRPC hizmetleri.
ASP.NET Core’da gRPC hizmetleri
gRPC hizmetleri ASP.NET Core üzerinde barındırılabilir. Hizmetler, günlüğe kaydetme, bağımlılık ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi ASP.NET Core özellikleriyle tam tümleştirmeye sahiptir.
ASP.NET Core uygulamasına gRPC hizmeti ekleme
gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için, bkz. gRPC yapılandırma.
gRPC hizmeti proje şablonu
ASP.NET Core gRPC Hizmeti proje şablonu bir başlangıç hizmeti sağlar:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
, .proto
dosyasındaki Greeter
hizmetinden oluşturulan GreeterBase
türünden devralır. Hizmet, Program.cs
içindeki istemciler tarafından erişilebilir hale getirilir:
app.MapGrpcService<GreeterService>();
ASP.NET Core'da gRPC hizmetleri hakkında daha fazla bilgi edinmek için, bkz. ASP.NET Core ile gRPC hizmetleri.
Bir .NET istemcisiyle gRPC hizmetlerini çağırma
gRPC istemcileri, .proto
dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisi, .proto
dosyasındaki gRPC hizmetine çevrilen yöntemlere sahiptir.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC istemcisi, gRPC hizmetine uzun süreli bir bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. GrpcChannel.ForAddress
kullanılarak bir kanal oluşturulabilir.
İstemci oluşturma ve farklı hizmet yöntemlerini çağırma hakkında daha fazla bilgi için, bkz. .NET istemcisiyle gRPC hizmetlerini çağırma.
Ek kaynaklar
gRPC dilden bağımsız, yüksek performanslı bir Uzaktan Yordam Çağrısı (RPC) çerçevesidir.
gRPC’nin başlıca avantajları şunlardır:
- Modern, yüksek performanslı, hafif RPC çerçevesi.
- Varsayılan olarak Protokol Arabellekleri kullanan, dilden bağımsız uygulamalara olanak veren Sözleşme öncelikli API geliştirme.
- Kesin tür belirtilmiş sunucular ve istemciler oluşturmak için çok sayıda dilde kullanılabilen araçlar.
- İstemci, sunucu ve iki yönlü akış çağrılarına yönelik destek.
- Protobuf ikili serileştirme ile azaltılmış ağ kullanımı.
Bu avantajlar, gRPC'nin aşağıdakiler için ideal olmasını sağlar:
- Verimliliğin kritik olduğu basit mikro hizmetler.
- Geliştirme için birden çok dilin gerekli olduğu çok teknolojili sistemler.
- Akış isteklerini veya yanıtlarını işlemesi gereken noktadan noktaya gerçek zamanlı hizmetler.
.proto
dosyaları için C# Araç desteği
gRPC, API geliştirme için sözleşme öncelikli bir yaklaşım kullanır. Hizmetler ve iletiler .proto
dosyalarında tanımlanır:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Hizmetler, istemciler ve iletiler için .NET türleri, .proto
dosyaları projeye eklenerek otomatik olarak oluşturulur:
- Grpc.Tools paketine paket başvurusu ekleme.
<Protobuf>
öğe grubuna.proto
dosyası ekleme.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC araç desteği hakkında daha fazla bilgi için, bkz. C# ile gRPC hizmetleri.
ASP.NET Core’da gRPC hizmetleri
gRPC hizmetleri ASP.NET Core üzerinde barındırılabilir. Hizmetler, günlüğe kaydetme, bağımlılık ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi ASP.NET Core özellikleriyle tam tümleştirmeye sahiptir.
ASP.NET Core uygulamasına gRPC hizmeti ekleme
gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için, bkz. gRPC yapılandırma.
gRPC hizmeti proje şablonu
gRPC hizmeti proje şablonu, bir başlangıç hizmeti sağlar:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
, .proto
dosyasındaki Greeter
hizmetinden oluşturulan GreeterBase
türünden devralır. Hizmet, Startup.cs
içindeki istemciler tarafından erişilebilir hale getirilir:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
ASP.NET Core'da gRPC hizmetleri hakkında daha fazla bilgi edinmek için, bkz. ASP.NET Core ile gRPC hizmetleri.
Bir .NET istemcisiyle gRPC hizmetlerini çağırma
gRPC istemcileri, .proto
dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisi, .proto
dosyasındaki gRPC hizmetine çevrilen yöntemlere sahiptir.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
gRPC istemcisi, gRPC hizmetine uzun süreli bir bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. GrpcChannel.ForAddress
kullanılarak bir kanal oluşturulabilir.
İstemci oluşturma ve farklı hizmet yöntemlerini çağırma hakkında daha fazla bilgi için, bkz. .NET istemcisiyle gRPC hizmetlerini çağırma.
Ek kaynaklar
ASP.NET Core