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

Temel alınan yığının uygulanması nedeniyle, tüm özellikler C çekirdek tabanlı gRPC uygulamaları ile .NET için gRPC arasında 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 .NET için gRPC için 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. içindeki Grpc.Net.Client istemci, kullanan .NET Framework için sınırlı desteğe WinHttpHandlersahiptir.

Daha fazla bilgi için bkz . .NET'te desteklenen platformlarda gRPC.

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:

  • Grpc.AspNetCore: Hizmetler ASP.NET Core tarafından barındırılır. Sunucu yapılandırma bilgileri için bkz . ASP.NET Core ile gRPC hizmetleri.
  • Grpc.Net.Client: İstemciler, GrpcChannel.NET'de yerleşik olarak bulunan ağ işlevselliğini dahili olarak kullanan kullanır. İstemci yapılandırma bilgileri için bkz . .NET istemcisiyle gRPC hizmetlerini çağırma.

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 hizmeti uygulama ö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 . Kapsamı belirlenmiş ömrü 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 ömrü hakkında daha fazla bilgi için bkz . ASP.NET Core'da bağımlılık ekleme.

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ün kapsamı tek olarak 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 grpc.max_receive_message_lengthgrpc.max_send_message_length ayarlar Sunucu örneği oluşturulurken ile ChannelOption yapılandırılır.

ASP.NET Core'da gRPC türü aracılığıyla GrpcServiceOptions 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 bkz . .NET yapılandırması için gRPC.

Günlük Kaydı

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

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

gRPC günlüğü ve tanılama hakkında daha fazla bilgi için bkz . .NET üzerinde 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 KesişimCihazları

ASP.NET Core ara yazılımı , C çekirdek tabanlı gRPC uygulamalarındaki kesme makinelerine kıyasla benzer işlevler sunar. Her ikisi de ASP.NET Core gRPC uygulamaları tarafından desteklenir, bu nedenle kesme avcılarını yeniden yazmaya gerek yoktur.

Bu özelliklerin birbiriyle karşılaştırması hakkında daha fazla bilgi için bkz . gRPC Kesme Makineleri ve Ara Yazılım.

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 eklenerek <FrameworkReference Include="Microsoft.AspNetCore.App" /> non-ASP.NET Core projelerine 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 bkz . non-ASP.NET Core projelerinde gRPC barındırma.

Ek kaynaklar