Aracılığıyla paylaş


.NET için gRPC'yi C çekirdeğinden gRPC'ye geçirme

Not

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

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 9 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Temel alınan yığının uygulanması nedeniyle, C-core tabanlı gRPC uygulamaları ile .NET için gRPC arasında tüm özellikler aynı şekilde çalışmaz. Bu belgede, iki yığın arasında geçiş için önemli farklar vurgulanır.

Önemli

gRPC C-core bakım modundadır ve yerine .NET için gRPC tercih edilerek kullanım dışı bırakılacaktır. gRPC C-core yeni uygulamalar için önerilmez.

Platform desteği

.NET için gRPC C-core ve gRPC farklı platform desteğine sahiptir:

  • gRPC C-core: Kendi TLS ve HTTP/2 yığınlarına sahip bir C++ gRPC uygulaması. Grpc.Core Paket, gRPC C-core çevresindeki bir .NET sarmalayıcıdır ve bir gRPC istemcisi ve sunucusu içerir. .NET Framework, .NET Core ve .NET 5 veya üzerini destekler.
  • .NET için gRPC: .NET Core 3.x ve .NET 5 veya üzeri için tasarlanmıştır. Modern .NET sürümlerinde yerleşik olarak bulunan TLS ve HTTP/2 yığınlarını kullanır. Paket, Grpc.AspNetCore ASP.NET Core'da barındırılan ve .NET Core 3.x veya .NET 5 veya üzerini gerektiren bir gRPC sunucusu içerir. Paket Grpc.Net.Client bir gRPC istemcisi içerir. Grpc.Net.Client içindeki istemci, WinHttpHandler kullanarak .NET Framework için sınırlı desteğe sahiptir.

Daha fazla bilgi için .NET'te desteklenen platformlardaki gRPC konusuna bakın.

Sunucu ve kanalı yapılandırma

.NET için gRPC C-Core'dan gRPC'ye geçirilirken NuGet paketleri, yapılandırması ve başlangıç kodu değiştirilmelidir.

.NET için gRPC, istemcisi ve sunucusu için ayrı NuGet paketlerine sahiptir. Eklenen paketler, bir uygulamanın gRPC hizmetlerini barındırıp barındırmadığına veya bunları çağırıp çağırmadığına bağlıdır:

Geçiş tamamlandığında paket Grpc.Core uygulamadan kaldırılmalıdır. Grpc.Core büyük yerel ikili dosyalar içerir ve paketin kaldırılması NuGet geri yükleme süresini ve uygulama boyutunu azaltır.

Kodla oluşturulan hizmetler ve istemciler

.NET için gRPC C-Core ve gRPC birçok API'yi paylaşır ve dosyalardan .proto oluşturulan kod her iki gRPC uygulamasıyla da uyumludur. Çoğu istemci ve hizmet, değişiklik yapılmadan C-Core'dan .NET için gRPC'ye geçirilebilir.

gRPC hizmet uygulaması ömrü

ASP.NET Core yığınında gRPC hizmetleri varsayılan olarak kapsamlı bir yaşam süresiyle oluşturulur. Buna karşılık, gRPC C-core varsayılan olarak tek kullanım ömrüne sahip bir hizmete bağlanır.

Kapsamlı bir yaşam süresi, hizmet uygulamasının kapsamlı yaşam süreleri olan diğer hizmetleri çözümlemesine olanak tanır. Örneğin, kapsamlı bir yaşam süresi, oluşturucu ekleme yoluyla DI kapsayıcısından da çözümlenebilir DbContext . Kapsamlı yaşam süresini kullanma:

  • Her istek için hizmet uygulamasının yeni bir örneği oluşturulur.
  • Uygulama türündeki örnek üyeleri aracılığıyla istekler arasında durum paylaşmak mümkün değildir.
  • Beklenti, paylaşılan durumları DI kapsayıcısında tek bir hizmette depolamaktır. Depolanan paylaşılan durumlar gRPC hizmeti uygulamasının oluşturucusunda çözümlenir.

Hizmet ömürleri hakkında daha fazla bilgi için ASP.NET Core'da Bağımlılık Ekleme konusuna bakın.

Tekil hizmet ekleme

gRPC C-core uygulamasından ASP.NET Core'a geçişi kolaylaştırmak için, hizmet uygulamasının hizmet ömrünü kapsamlıdan tekil hale değiştirmek mümkündür. Bu, DI kapsayıcısına hizmet uygulamasının bir örneğini eklemeyi içerir:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
    services.AddSingleton(new GreeterService());
}

Ancak, tek kullanım ömrü olan bir hizmet uygulaması artık oluşturucu ekleme yoluyla kapsamlı hizmetleri çözümleyemez.

gRPC hizmetleri seçeneklerini yapılandırma

C çekirdek tabanlı uygulamalarda, ve gibi ayarlar, Sunucu örneği oluşturulurken ile yapılandırılır.

ASP.NET Core'da, GrpcServiceOptions türü aracılığıyla gRPC yapılandırma sağlar. Örneğin, bir gRPC hizmetinin gelen ileti boyutu üst sınırı aracılığıyla AddGrpcyapılandırılabilir. Aşağıdaki örnek varsayılan MaxReceiveMessageSize 4 MB değerini 16 MB olarak değiştirir:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
    });
}

Yapılandırma hakkında daha fazla bilgi için .NET için gRPC yapılandırması'na bakın.

Kayıt Tutma

C çekirdeği tabanlı uygulamalar GrpcEnvironment hata ayıklama amacıyla günlükçüyü yapılandırmak için güvenir. ASP.NET Core yığını, Logging API'si aracılığıyla bu işlevi sağlar. Örneğin, gRPC hizmetine bir günlükçü eklenebilir.

Yapıcı Enjeksiyonu:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }
}

Birincil oluşturucu ekleme (.NET 8 veya üzeri):

public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    ...
}

gRPC'de günlüğe kaydetme ve tanılama hakkında daha fazla bilgi için bkz .NET'te gRPC'de Günlüğe Kaydetme ve Tanılama.

HTTPS

C çekirdek tabanlı uygulamalar, Server.Ports özelliği aracılığıyla HTTPS'yi yapılandırmaktadır. ASP.NET Core'da sunucuları yapılandırmak için de benzer bir kavram kullanılır. Örneğin, Kestrel bu işlevsellik için uç nokta yapılandırmasını kullanır.

C çekirdek tabanlı uygulamalar, Server.Ports özelliği aracılığıyla HTTPS'yi yapılandırmaktadır. ASP.NET Core'da sunucuları yapılandırmak için de benzer bir kavram kullanılır. Örneğin, Kestrel bu işlevsellik için uç nokta yapılandırmasını kullanır.

gRPC Yakalıyıcılar

ASP.NET Core ara yazılımı, C-core tabanlı gRPC uygulamalarındaki kesicilere kıyasla benzer işlevler sunar. Her ikisi de ASP.NET Core gRPC uygulamaları tarafından desteklenir, bu nedenle yakalayıcıları yeniden yazmaya gerek yoktur.

Bu özelliklerin birbirleriyle nasıl karşılaştırıldığını görmek için gRPC Ara Katmanlar ve Ara Yazılım bölümüne bakınız.

non-ASP.NET Core projelerinde gRPC barındırma

C çekirdek tabanlı bir sunucu herhangi bir proje türüne eklenebilir. .NET sunucusu için gRPC için ASP.NET Core gerekir. proje dosyası SDK olarak belirtildiğinden Microsoft.NET.SDK.Web ASP.NET Core genellikle kullanılabilir.

Bir gRPC sunucusu, bir projeye <FrameworkReference Include="Microsoft.AspNetCore.App" /> eklenerek ASP.NET Core dışındaki projelere de barındırılabilir. Çerçeve başvurusu, ASP.NET Çekirdek API'lerini kullanılabilir hale getirir ve bir ASP.NET Core sunucusu başlatmak için kullanılabilir.

Daha fazla bilgi için non-ASP.NET Core projelerinde gRPC barındırma bölümüne bakınız.

Ek kaynaklar