.NET üzerinde gRPC'ye genel bakış

Note

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 10 sürümüne bakın.

Warning

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 10 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 Arabelleklerini kullanan sözleşme öncelikli API geliştirme, dil bağımsız uygulamalara olanak sağlar.
  • Farklı dillerde güçlü tipli sunucular ve istemciler üretmek için 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.
  • Gerçek zamanlı istek veya yanıt akışlarını işlemesi gereken noktadan noktaya 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, bir projeye .proto dosyaları eklenerek otomatik olarak oluşturulur:

  • Grpc.Tools paketine bir paket başvurusu ekleyin.
  • Öğe grubuna <Protobuf> dosyaları ekleyin.
<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(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    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
        });
    }
}
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 dosyasındaki istemciler tarafından erişilebilir hale getirilir:

app.MapGrpcService<GreeterService>();

Daha fazla bilgi edinmek için ASP.NET Core ile gRPC hizmetleri sayfasına bakınız.

.NET istemcisiyle gRPC hizmeti çağrıları

gRPC istemcileri , .proto dosyalarından oluşturulan somut istemci türleridir. Somut gRPC istemcisi, .proto dosyasındaki gRPC hizmetine karşılık gelen 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 ömürlü bir bağlantıyı temsil eden bir kanal kullanılarak oluşturulur. kullanılarak GrpcChannel.ForAddressbir 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.

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.
  • Güçlü türemiş sunucular ve istemciler oluşturmak için birçok dilde kullanılabilen araçlar.
  • İstemci, sunucu ve iki yönlü akış çağrılarına yönelik destek.
  • Protobuf ikili serileştirme ile ağ kullanımı azaltıldı.

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.
  • .proto öğe grubuna <Protobuf> 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, GreeterBase dosyasındaki Greeter hizmetinden oluşturulan .proto 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 bir gRPC istemcisi, .proto dosyasındaki gRPC hizmetine dönüştürülen 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.