.NET üzerinde gRPC'ye giriş
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'yi şu avantajlar için ideal hale 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.
Uyarı
ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .
.proto dosyaları için C# Araç desteği
gRPC, API geliştirme için sözleşmeye ilk 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 bir projeye * .proto dosyaları dahil edildiklerinden otomatik olarak oluşturulur:
- Grpc.Tools paketine paket başvurusu ekleyin.
- * Öğe grubuna .proto
<Protobuf>dosyaları ekleyin.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC araç desteği hakkında daha fazla bilgi için bkz. C# içeren gRPC hizmetleri .
ASP.NET Core'da gRPC hizmetleri
gRPC hizmetleri, ASP.NET Core. Hizmetler; günlüğe kaydetme, ASP.NET Core ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi farklı özelliklerle tam tümleştirmeye sahiptir.
ASP.NET Core uygulamasına gRPC hizmetleri ekleme
gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için bkz. gRPC'yi yapılandırma.
gRPC hizmeti proje şablonu
gRPC ASP.NET Core ş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, GreeterBase .proto dosyasındaki hizmetten Greeter oluşturulan türünden * devralır. Hizmet, Program.cs'de istemcilerin erişimine açık hale geldi:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
Bu hizmetlerde gRPC hizmetleri hakkında daha fazla ASP.NET Core ASP.NET Core içeren gRPC Hizmetleri bkz. .
.NET istemcisiyle gRPC hizmetlerini çağırma
gRPC istemcileri, * .proto dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisinin * .proto dosyasındaki gRPC hizmetine çeviren yöntemleri vardır.
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, bir gRPC hizmetine uzun süreli bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. kullanılarak bir kanal GrpcChannel.ForAddress 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'yi şu avantajlar için ideal hale 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.
Uyarı
ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .
.proto dosyaları için C# Araç desteği
gRPC, API geliştirme için sözleşmeye ilk 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 bir projeye * .proto dosyaları dahil edildiklerinden otomatik olarak oluşturulur:
- Grpc.Tools paketine paket başvurusu ekleyin.
- * Öğe grubuna .proto
<Protobuf>dosyaları ekleyin.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
gRPC araç desteği hakkında daha fazla bilgi için bkz. C# içeren gRPC hizmetleri .
ASP.NET Core'da gRPC hizmetleri
gRPC hizmetleri, ASP.NET Core. Hizmetler; günlüğe kaydetme, ASP.NET Core ekleme (DI), kimlik doğrulaması ve yetkilendirme gibi farklı özelliklerle tam tümleştirmeye sahiptir.
ASP.NET Core uygulamasına gRPC hizmetleri ekleme
gRPC, Grpc.AspNetCore paketini gerektirir. Bir .NET uygulamasında gRPC yapılandırma hakkında bilgi için bkz. gRPC'yi 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, GreeterBase .proto dosyasındaki hizmetten Greeter oluşturulan türünden * devralır. Hizmet Startup.cs'de istemcilerin erişimine açık hale geldi:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
Bu hizmetlerde gRPC hizmetleri hakkında daha fazla ASP.NET Core ASP.NET Core içeren gRPC Hizmetleri bkz. .
.NET istemcisiyle gRPC hizmetlerini çağırma
gRPC istemcileri, * .proto dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisinin * .proto dosyasındaki gRPC hizmetine çeviren yöntemleri vardır.
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, bir gRPC hizmetine uzun süreli bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. kullanılarak bir kanal GrpcChannel.ForAddress 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 .