Öğretici: ASP.NET Core'da gRPC istemcisi ve sunucusu oluşturma
Bu öğreticide .NET Core gRPC istemcisi ve ASP.NET Core gRPC Sunucusu oluşturma gösterilmektedir. Sonunda gRPC Greeter hizmetiyle iletişim kuran bir gRPC istemciniz olacak.
Bu öğreticide şunları yaptınız:
- gRPC Sunucusu oluşturun.
- Bir gRPC istemcisi oluşturun.
- gRPC istemcisini gRPC Greeter hizmetiyle test edin.
Önkoşullar
Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
gRPC hizmeti oluşturma
- Visual Studio 2022'yi başlatın ve Yeni Proje'yi seçin.
- Yeni proje oluştur iletişim kutusunda öğesini arayın
gRPC
. ASP.NET Core gRPC Hizmeti'ne ve ardından İleri'ye tıklayın. - Yeni projenizi yapılandırın iletişim kutusunda Proje adı için girin
GrpcGreeter
. Kodu kopyalayıp yapıştırdığınızda ad alanlarının eşleşmesi için projeyi GrpcGreeter olarak adlandırmanız önemlidir. - İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 8.0 (Uzun Vadeli Destek) öğesini ve ardından Oluştur'u seçin.
Hizmeti çalıştırma
Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.
Proje henüz SSL kullanmak üzere yapılandırılmamışsa Visual Studio aşağıdaki iletişim kutusunu görüntüler:
IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.
Aşağıdaki iletişim kutusu görüntülenir:
Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet'i seçin.
Firefox tarayıcısına güvenme hakkında bilgi için bkz . Firefox SEC_ERROR_INADEQUATE_KEY_USAGE sertifika hatası.
Visual Studio:
- Sunucuyu başlatır Kestrel .
- Bir tarayıcı başlatır.
- gibi
http://localhost:7042
adresinehttp://localhost:port
gider.- bağlantı noktası: Uygulama için rastgele atanan bağlantı noktası numarası.
localhost
: Yerel bilgisayar için standart ana bilgisayar adı. Localhost yalnızca yerel bilgisayardan web istekleri sağlar.
Günlükler, https://localhost:<port>
üzerinde dinleyen hizmeti gösterir; burada <port>
proje oluşturulduğunda ve içinde Properties/launchSettings.json
ayarlandığında localhost bağlantı noktası numarası rastgele atanır.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Not
gRPC şablonu Aktarım Katmanı Güvenliği 'ni (TLS) kullanacak şekilde yapılandırılmıştır. gRPC istemcilerinin sunucuyu çağırmak için HTTPS kullanması gerekir. gRPC hizmeti localhost bağlantı noktası numarası, proje oluşturulduğunda ve gRPC hizmet projesinin Properties\launchSettings.json dosyasında ayarlandığında rastgele atanır.
Proje dosyalarını inceleme
GrpcGreeter proje dosyaları:
Protos/greet.proto
: gRPC'yiGreeter
tanımlar ve gRPC sunucu varlıklarını oluşturmak için kullanılır. Daha fazla bilgi için bkz . gRPC'ye giriş.Services
klasör: Hizmetin uygulamasınıGreeter
içerir.appSettings.json
: tarafından Kestrelkullanılan protokol gibi yapılandırma verilerini içerir. Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.Program.cs
öğesini içerir:- gRPC hizmetinin giriş noktası. Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.
- Uygulama davranışını yapılandıran kod. Daha fazla bilgi için bkz . Uygulama başlatma.
.NET konsol uygulamasında gRPC istemcisi oluşturma
- Visual Studio'nun ikinci bir örneğini açın ve Yeni Proje'yi seçin.
- Yeni proje oluştur iletişim kutusunda Konsol Uygulaması'nı ve ardından İleri'yi seçin.
- Proje adı metin kutusuna GrpcGreeterClient yazın ve İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 8.0 (Uzun Vadeli Destek) öğesini ve ardından Oluştur'u seçin.
Gerekli NuGet paketlerini ekleme
gRPC istemci projesi aşağıdaki NuGet paketlerini gerektirir:
- .NET Core istemcisini içeren Grpc.Net.Client.
- C# için protobuf ileti API'lerini içeren Google.Protobuf.
- Protobuf dosyaları için C# araç desteği içeren Grpc.Tools. Araç paketi çalışma zamanında gerekli olmadığından bağımlılık ile
PrivateAssets="All"
işaretlenir.
Paket Yöneticisi Konsolu (PMC) veya NuGet Paketlerini Yönet'i kullanarak paketleri yükleyin.
Paketleri yüklemek için PMC seçeneği
Visual Studio'da Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin
Paket Yöneticisi Konsolu penceresinde, dizinleri dosyaları içeren
GrpcGreeterClient.csproj
klasöre değiştirmek için komutunu çalıştırıncd GrpcGreeterClient
.Aşağıdaki komutları çalıştırın:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Paketleri yüklemek için NuGet Paketlerini Yönet seçeneği
- Çözüm Gezgini> NuGet Paketlerini Yönet'te projeye sağ tıklayın.
- Gözat sekmesini seçin.
- Arama kutusuna Grpc.Net.Client yazın.
- Gözat sekmesinden Grpc.Net.Client paketini ve ardından Yükle'yi seçin.
Google.Protobuf
veGrpc.Tools
için tekrarlayın.
greet.proto ekle
gRPC istemci projesinde bir Protos klasörü oluşturun.
gRPC Greeter hizmetinden Protos\greet.proto dosyasını gRPC istemci projesindeki Protos klasörüne kopyalayın.
Dosyanın içindeki ad alanını
greet.proto
projenin ad alanına güncelleştirin:option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
Proje dosyasını düzenleyin:
Projeye sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.
greet.proto dosyasına başvuran bir öğe içeren bir
<Protobuf>
öğe grubu ekleyin:<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter istemcisini oluşturma
- ad alanında türleri oluşturmak için istemci projesini
GrpcGreeterClient
oluşturun.
Not
Türler GrpcGreeterClient
, derleme işlemi tarafından otomatik olarak oluşturulur. Grpc.Tools araç paketi greet.proto dosyasına göre aşağıdaki dosyaları oluşturur:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: İstek ve yanıt ileti türlerini dolduran, serileştiren ve alan protokol arabellek kodu.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Oluşturulan istemci sınıflarını içerir.
Grpc.Tools tarafından otomatik olarak oluşturulan C# varlıkları hakkında daha fazla bilgi için bkz. C#: Oluşturulan C# varlıkları ile gRPC hizmetleri.
gRPC istemci
Program.cs
dosyasını aşağıdaki kodla güncelleştirin.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
Yukarıdaki vurgulanan kodda localhost bağlantı noktası numarasını
7042
hizmet projesindeProperties/launchSettings.json
GrpcGreeter
belirtilen bağlantı noktası numarasıylaHTTPS
değiştirin.
Program.cs
gRPC istemcisinin giriş noktasını ve mantığını içerir.
Greeter istemcisi şu şekilde oluşturulur:
- gRPC hizmetine bağlantı oluşturmaya yönelik bilgileri içeren bir
GrpcChannel
örneği oluşturma. - Greeter istemcisini oluşturmak için komutunu
GrpcChannel
kullanma:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter istemcisi zaman uyumsuz SayHello
yöntemini çağırır. Çağrının SayHello
sonucu görüntülenir:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC istemcisini gRPC Greeter hizmetiyle test edin
appsettings.Development.json
Aşağıdaki vurgulanmış satırları ekleyerek dosyayı güncelleştirin:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- Greeter hizmetinde, sunucuyu hata ayıklayıcı olmadan başlatmak için basın
Ctrl+F5
. - Projede
GrpcGreeterClient
, istemciyi hata ayıklayıcı olmadan başlatmak için basınCtrl+F5
.
İstemci, hizmete GreeterClient adını içeren bir ileti içeren bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletisini gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:
Greeting: Hello GreeterClient
Press any key to exit...
gRPC hizmeti, başarılı çağrının ayrıntılarını komut istemine yazılan günlüklere kaydeder:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Not
Bu makaledeki kod, gRPC hizmetinin güvenliğini sağlamak için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya The SSL connection could not be established.
iletisiyle The remote certificate is invalid according to the validation procedure.
başarısız olursa geliştirme sertifikasına güvenilmez. Bu sorunu çözmek için bkz . Güvenilmeyen/geçersiz sertifikaya sahip bir gRPC hizmetini çağırma.
Sonraki adımlar
Bu öğreticide .NET Core gRPC istemcisi ve ASP.NET Core gRPC Sunucusu oluşturma gösterilmektedir. Sonunda gRPC Greeter hizmetiyle iletişim kuran bir gRPC istemciniz olacak.
Bu öğreticide şunları yaptınız:
- gRPC Sunucusu oluşturun.
- Bir gRPC istemcisi oluşturun.
- gRPC istemcisini gRPC Greeter hizmetiyle test edin.
Önkoşullar
Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
gRPC hizmeti oluşturma
- Visual Studio 2022'yi başlatın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda öğesini arayın
gRPC
. ASP.NET Core gRPC Hizmeti'ne ve ardından İleri'ye tıklayın. - Yeni projenizi yapılandırın iletişim kutusunda Proje adı için girin
GrpcGreeter
. Kodu kopyalayıp yapıştırdığınızda ad alanlarının eşleşmesi için projeyi GrpcGreeter olarak adlandırmanız önemlidir. - İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 6.0 (uzun süreli destek) öğesini ve ardından Oluştur'u seçin.
Hizmeti çalıştırma
Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.
Proje henüz SSL kullanmak üzere yapılandırılmamışsa Visual Studio aşağıdaki iletişim kutusunu görüntüler:
IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.
Aşağıdaki iletişim kutusu görüntülenir:
Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet'i seçin.
Firefox tarayıcısına güvenme hakkında bilgi için bkz . Firefox SEC_ERROR_INADEQUATE_KEY_USAGE sertifika hatası.
Visual Studio:
- Sunucuyu başlatır Kestrel .
- Bir tarayıcı başlatır.
- gibi
http://localhost:7042
adresinehttp://localhost:port
gider.- bağlantı noktası: Uygulama için rastgele atanan bağlantı noktası numarası.
localhost
: Yerel bilgisayar için standart ana bilgisayar adı. Localhost yalnızca yerel bilgisayardan web istekleri sağlar.
Günlükler, https://localhost:<port>
üzerinde dinleyen hizmeti gösterir; burada <port>
proje oluşturulduğunda ve içinde Properties/launchSettings.json
ayarlandığında localhost bağlantı noktası numarası rastgele atanır.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Not
gRPC şablonu Aktarım Katmanı Güvenliği 'ni (TLS) kullanacak şekilde yapılandırılmıştır. gRPC istemcilerinin sunucuyu çağırmak için HTTPS kullanması gerekir. gRPC hizmeti localhost bağlantı noktası numarası, proje oluşturulduğunda ve gRPC hizmet projesinin Properties\launchSettings.json dosyasında ayarlandığında rastgele atanır.
macOS, TLS ile ASP.NET Core gRPC'i desteklemez. macOS üzerinde gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gereklidir. Daha fazla bilgi için bkz . macOS üzerinde ASP.NET Core gRPC uygulaması başlatılamıyor.
Proje dosyalarını inceleme
GrpcGreeter proje dosyaları:
Protos/greet.proto
: gRPC'yiGreeter
tanımlar ve gRPC sunucu varlıklarını oluşturmak için kullanılır. Daha fazla bilgi için bkz . gRPC'ye giriş.Services
klasör: Hizmetin uygulamasınıGreeter
içerir.appSettings.json
: tarafından Kestrelkullanılan protokol gibi yapılandırma verilerini içerir. Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.Program.cs
öğesini içerir:- gRPC hizmetinin giriş noktası. Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.
- Uygulama davranışını yapılandıran kod. Daha fazla bilgi için bkz . Uygulama başlatma.
.NET konsol uygulamasında gRPC istemcisi oluşturma
- Visual Studio'nun ikinci bir örneğini açın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda Konsol Uygulaması'nı ve ardından İleri'yi seçin.
- Proje adı metin kutusuna GrpcGreeterClient yazın ve İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 6.0 (uzun süreli destek) öğesini ve ardından Oluştur'u seçin.
Gerekli NuGet paketlerini ekleme
gRPC istemci projesi aşağıdaki NuGet paketlerini gerektirir:
- .NET Core istemcisini içeren Grpc.Net.Client.
- C# için protobuf ileti API'lerini içeren Google.Protobuf.
- Protobuf dosyaları için C# araç desteği içeren Grpc.Tools. Araç paketi çalışma zamanında gerekli olmadığından bağımlılık ile
PrivateAssets="All"
işaretlenir.
Paket Yöneticisi Konsolu (PMC) veya NuGet Paketlerini Yönet'i kullanarak paketleri yükleyin.
Paketleri yüklemek için PMC seçeneği
Visual Studio'da Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin
Paket Yöneticisi Konsolu penceresinde, dizinleri dosyaları içeren
GrpcGreeterClient.csproj
klasöre değiştirmek için komutunu çalıştırıncd GrpcGreeterClient
.Aşağıdaki komutları çalıştırın:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Paketleri yüklemek için NuGet Paketlerini Yönet seçeneği
- Çözüm Gezgini> NuGet Paketlerini Yönet'te projeye sağ tıklayın.
- Gözat sekmesini seçin.
- Arama kutusuna Grpc.Net.Client yazın.
- Gözat sekmesinden Grpc.Net.Client paketini ve ardından Yükle'yi seçin.
Google.Protobuf
veGrpc.Tools
için tekrarlayın.
greet.proto ekle
gRPC istemci projesinde bir Protos klasörü oluşturun.
gRPC Greeter hizmetinden Protos\greet.proto dosyasını gRPC istemci projesindeki Protos klasörüne kopyalayın.
Dosyanın içindeki ad alanını
greet.proto
projenin ad alanına güncelleştirin:option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
Proje dosyasını düzenleyin:
Projeye sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.
greet.proto dosyasına başvuran bir öğe içeren bir
<Protobuf>
öğe grubu ekleyin:<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter istemcisini oluşturma
- ad alanında türleri oluşturmak için istemci projesini
GrpcGreeterClient
oluşturun.
Not
Türler GrpcGreeterClient
, derleme işlemi tarafından otomatik olarak oluşturulur. Grpc.Tools araç paketi greet.proto dosyasına göre aşağıdaki dosyaları oluşturur:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: İstek ve yanıt ileti türlerini dolduran, serileştiren ve alan protokol arabellek kodu.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Oluşturulan istemci sınıflarını içerir.
Grpc.Tools tarafından otomatik olarak oluşturulan C# varlıkları hakkında daha fazla bilgi için bkz. C#: Oluşturulan C# varlıkları ile gRPC hizmetleri.
gRPC istemci
Program.cs
dosyasını aşağıdaki kodla güncelleştirin.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
Yukarıdaki vurgulanan kodda localhost bağlantı noktası numarasını
7042
hizmet projesindeProperties/launchSettings.json
GrpcGreeter
belirtilen bağlantı noktası numarasıylaHTTPS
değiştirin.
Program.cs
gRPC istemcisinin giriş noktasını ve mantığını içerir.
Greeter istemcisi şu şekilde oluşturulur:
- gRPC hizmetine bağlantı oluşturmaya yönelik bilgileri içeren bir
GrpcChannel
örneği oluşturma. - Greeter istemcisini oluşturmak için komutunu
GrpcChannel
kullanma:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter istemcisi zaman uyumsuz SayHello
yöntemini çağırır. Çağrının SayHello
sonucu görüntülenir:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC istemcisini gRPC Greeter hizmetiyle test edin
appsettings.Development.json
Aşağıdaki vurgulanmış satırları ekleyerek dosyayı güncelleştirin:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
}
}
}
- Greeter hizmetinde, sunucuyu hata ayıklayıcı olmadan başlatmak için basın
Ctrl+F5
. - Projede
GrpcGreeterClient
, istemciyi hata ayıklayıcı olmadan başlatmak için basınCtrl+F5
.
İstemci, hizmete GreeterClient adını içeren bir ileti içeren bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletisini gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:
Greeting: Hello GreeterClient
Press any key to exit...
gRPC hizmeti, başarılı çağrının ayrıntılarını komut istemine yazılan günlüklere kaydeder:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Not
Bu makaledeki kod, gRPC hizmetinin güvenliğini sağlamak için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya The SSL connection could not be established.
iletisiyle The remote certificate is invalid according to the validation procedure.
başarısız olursa geliştirme sertifikasına güvenilmez. Bu sorunu çözmek için bkz . Güvenilmeyen/geçersiz sertifikaya sahip bir gRPC hizmetini çağırma.
Sonraki adımlar
Bu öğreticide .NET Core gRPC istemcisi ve ASP.NET Core gRPC Sunucusu oluşturma gösterilmektedir. Sonunda gRPC Greeter hizmetiyle iletişim kuran bir gRPC istemciniz olacak.
Bu öğreticide şunları yaptınız:
- gRPC Sunucusu oluşturun.
- Bir gRPC istemcisi oluşturun.
- gRPC istemcisini gRPC Greeter hizmetiyle test edin.
Önkoşullar
- Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
- .NET 6.0 SDK
gRPC hizmeti oluşturma
- Visual Studio 2022'yi başlatın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda öğesini arayın
gRPC
. ASP.NET Core gRPC Hizmeti'ne ve ardından İleri'ye tıklayın. - Yeni projenizi yapılandırın iletişim kutusunda Proje adı için girin
GrpcGreeter
. Kodu kopyalayıp yapıştırdığınızda ad alanlarının eşleşmesi için projeyi GrpcGreeter olarak adlandırmanız önemlidir. - İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 6.0 (uzun süreli destek) öğesini ve ardından Oluştur'u seçin.
Hizmeti çalıştırma
Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.
Proje henüz SSL kullanmak üzere yapılandırılmamışsa Visual Studio aşağıdaki iletişim kutusunu görüntüler:
IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.
Aşağıdaki iletişim kutusu görüntülenir:
Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet'i seçin.
Firefox tarayıcısına güvenme hakkında bilgi için bkz . Firefox SEC_ERROR_INADEQUATE_KEY_USAGE sertifika hatası.
Visual Studio:
- Sunucuyu başlatır Kestrel .
- Bir tarayıcı başlatır.
- gibi
http://localhost:7042
adresinehttp://localhost:port
gider.- bağlantı noktası: Uygulama için rastgele atanan bağlantı noktası numarası.
localhost
: Yerel bilgisayar için standart ana bilgisayar adı. Localhost yalnızca yerel bilgisayardan web istekleri sağlar.
Günlükler, https://localhost:<port>
üzerinde dinleyen hizmeti gösterir; burada <port>
proje oluşturulduğunda ve içinde Properties/launchSettings.json
ayarlandığında localhost bağlantı noktası numarası rastgele atanır.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Not
gRPC şablonu Aktarım Katmanı Güvenliği 'ni (TLS) kullanacak şekilde yapılandırılmıştır. gRPC istemcilerinin sunucuyu çağırmak için HTTPS kullanması gerekir. gRPC hizmeti localhost bağlantı noktası numarası, proje oluşturulduğunda ve gRPC hizmet projesinin Properties\launchSettings.json dosyasında ayarlandığında rastgele atanır.
macOS, TLS ile ASP.NET Core gRPC'i desteklemez. macOS üzerinde gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gereklidir. Daha fazla bilgi için bkz . macOS üzerinde ASP.NET Core gRPC uygulaması başlatılamıyor.
Proje dosyalarını inceleme
GrpcGreeter proje dosyaları:
Protos/greet.proto
: gRPC'yiGreeter
tanımlar ve gRPC sunucu varlıklarını oluşturmak için kullanılır. Daha fazla bilgi için bkz . gRPC'ye giriş.Services
klasör: Hizmetin uygulamasınıGreeter
içerir.appSettings.json
: tarafından Kestrelkullanılan protokol gibi yapılandırma verilerini içerir. Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.Program.cs
öğesini içerir:- gRPC hizmetinin giriş noktası. Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.
- Uygulama davranışını yapılandıran kod. Daha fazla bilgi için bkz . Uygulama başlatma.
.NET konsol uygulamasında gRPC istemcisi oluşturma
- Visual Studio'nun ikinci bir örneğini açın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda Konsol Uygulaması'nı ve ardından İleri'yi seçin.
- Proje adı metin kutusuna GrpcGreeterClient yazın ve İleri'yi seçin.
- Ek bilgi iletişim kutusunda .NET 6.0 (uzun süreli destek) öğesini ve ardından Oluştur'u seçin.
Gerekli NuGet paketlerini ekleme
gRPC istemci projesi aşağıdaki NuGet paketlerini gerektirir:
- .NET Core istemcisini içeren Grpc.Net.Client.
- C# için protobuf ileti API'lerini içeren Google.Protobuf.
- Protobuf dosyaları için C# araç desteği içeren Grpc.Tools. Araç paketi çalışma zamanında gerekli olmadığından bağımlılık ile
PrivateAssets="All"
işaretlenir.
Paket Yöneticisi Konsolu (PMC) veya NuGet Paketlerini Yönet'i kullanarak paketleri yükleyin.
Paketleri yüklemek için PMC seçeneği
Visual Studio'da Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin
Paket Yöneticisi Konsolu penceresinde, dizinleri dosyaları içeren
GrpcGreeterClient.csproj
klasöre değiştirmek için komutunu çalıştırıncd GrpcGreeterClient
.Aşağıdaki komutları çalıştırın:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Paketleri yüklemek için NuGet Paketlerini Yönet seçeneği
- Çözüm Gezgini> NuGet Paketlerini Yönet'te projeye sağ tıklayın.
- Gözat sekmesini seçin.
- Arama kutusuna Grpc.Net.Client yazın.
- Gözat sekmesinden Grpc.Net.Client paketini ve ardından Yükle'yi seçin.
Google.Protobuf
veGrpc.Tools
için tekrarlayın.
greet.proto ekle
gRPC istemci projesinde bir Protos klasörü oluşturun.
gRPC Greeter hizmetinden Protos\greet.proto dosyasını gRPC istemci projesindeki Protos klasörüne kopyalayın.
Dosyanın içindeki ad alanını
greet.proto
projenin ad alanına güncelleştirin:option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
Proje dosyasını düzenleyin:
Projeye sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.
greet.proto dosyasına başvuran bir öğe içeren bir
<Protobuf>
öğe grubu ekleyin:<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter istemcisini oluşturma
- ad alanında türleri oluşturmak için istemci projesini
GrpcGreeterClient
oluşturun.
Not
Türler GrpcGreeterClient
, derleme işlemi tarafından otomatik olarak oluşturulur. Grpc.Tools araç paketi greet.proto dosyasına göre aşağıdaki dosyaları oluşturur:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: İstek ve yanıt ileti türlerini dolduran, serileştiren ve alan protokol arabellek kodu.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Oluşturulan istemci sınıflarını içerir.
Grpc.Tools tarafından otomatik olarak oluşturulan C# varlıkları hakkında daha fazla bilgi için bkz. C#: Oluşturulan C# varlıkları ile gRPC hizmetleri.
gRPC istemci
Program.cs
dosyasını aşağıdaki kodla güncelleştirin.using System.Threading.Tasks; using Grpc.Net.Client; using GrpcGreeterClient; // The port number must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:7042"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey();
Yukarıdaki vurgulanan kodda localhost bağlantı noktası numarasını
7042
hizmet projesindeProperties/launchSettings.json
GrpcGreeter
belirtilen bağlantı noktası numarasıylaHTTPS
değiştirin.
Program.cs
gRPC istemcisinin giriş noktasını ve mantığını içerir.
Greeter istemcisi şu şekilde oluşturulur:
- gRPC hizmetine bağlantı oluşturmaya yönelik bilgileri içeren bir
GrpcChannel
örneği oluşturma. - Greeter istemcisini oluşturmak için komutunu
GrpcChannel
kullanma:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
Greeter istemcisi zaman uyumsuz SayHello
yöntemini çağırır. Çağrının SayHello
sonucu görüntülenir:
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
gRPC istemcisini gRPC Greeter hizmetiyle test edin
- Greeter hizmetinde, sunucuyu hata ayıklayıcı olmadan başlatmak için basın
Ctrl+F5
. - Projede
GrpcGreeterClient
, istemciyi hata ayıklayıcı olmadan başlatmak için basınCtrl+F5
.
İstemci, hizmete GreeterClient adını içeren bir ileti içeren bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletisini gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:
Greeting: Hello GreeterClient
Press any key to exit...
gRPC hizmeti, başarılı çağrının ayrıntılarını komut istemine yazılan günlüklere kaydeder:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
appsettings.Development.json
Aşağıdaki satırları ekleyerek dosyayı güncelleştirin:
"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
Not
Bu makaledeki kod, gRPC hizmetinin güvenliğini sağlamak için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya The SSL connection could not be established.
iletisiyle The remote certificate is invalid according to the validation procedure.
başarısız olursa geliştirme sertifikasına güvenilmez. Bu sorunu çözmek için bkz . Güvenilmeyen/geçersiz sertifikaya sahip bir gRPC hizmetini çağırma.
Sonraki adımlar
Bu öğreticide .NET Core gRPC istemcisi ve ASP.NET Core gRPC Sunucusu oluşturma gösterilmektedir.
Sonunda gRPC Greeter hizmetiyle iletişim kuran bir gRPC istemciniz olacak.
Örnek kodu görüntüleme veya indirme (indirme).
Bu öğreticide şunları yaptınız:
- gRPC Sunucusu oluşturun.
- Bir gRPC istemcisi oluşturun.
- gRPC istemcisini gRPC Greeter hizmetiyle test edin.
Önkoşullar
- Visual Studio 2019 16.8 ve üzeri ile ASP.NET ve web geliştirme iş yükü
- .NET 5.0 SDK
gRPC hizmeti oluşturma
- Visual Studio'yu başlatın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda gRPC Hizmeti'ni ve ardından İleri'yi seçin.
- Yeni projenizi yapılandırın iletişim kutusunda Proje adı için girin
GrpcGreeter
. Kodu kopyalayıp yapıştırdığınızda ad alanlarının eşleşmesi için projeyi GrpcGreeter olarak adlandırmanız önemlidir. - İleri'yi seçin.
- Ek bilgi iletişim kutusunda Hedef Çerçeve açılan listesinde .NET 5.0'ı seçin.
- Oluştur'u belirleyin.
Hizmeti çalıştırma
Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.
Proje henüz SSL kullanmak üzere yapılandırılmamışsa Visual Studio aşağıdaki iletişim kutusunu görüntüler:
IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.
Aşağıdaki iletişim kutusu görüntülenir:
Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet'i seçin.
Firefox tarayıcısına güvenme hakkında bilgi için bkz . Firefox SEC_ERROR_INADEQUATE_KEY_USAGE sertifika hatası.
Visual Studio, IIS Express'i başlatır ve uygulamayı çalıştırır. Adres çubuğu gibi
example.com
bir şey değil, gösterilirlocalhost:port#
. Bunun nedenilocalhost
yerel bilgisayarın standart ana bilgisayar adı olmasıdır. Localhost yalnızca yerel bilgisayardan web istekleri sağlar. Visual Studio bir web projesi oluşturduğunda, web sunucusu için rastgele bir bağlantı noktası kullanılır.
Günlükler üzerinde https://localhost:5001
dinleyen hizmeti gösterir.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Not
gRPC şablonu Aktarım Katmanı Güvenliği 'ni (TLS) kullanacak şekilde yapılandırılmıştır. gRPC istemcilerinin sunucuyu çağırmak için HTTPS kullanması gerekir.
macOS, TLS ile ASP.NET Core gRPC'i desteklemez. macOS üzerinde gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gereklidir. Daha fazla bilgi için bkz . macOS üzerinde ASP.NET Core gRPC uygulaması başlatılamıyor.
Proje dosyalarını inceleme
GrpcGreeter proje dosyaları:
- greet.proto: Protos/greet.proto dosyası gRPC'yi
Greeter
tanımlar ve gRPC sunucu varlıklarını oluşturmak için kullanılır. Daha fazla bilgi için bkz . gRPC'ye giriş. - Hizmetler klasörü: Hizmetin uygulamasını
Greeter
içerir. appsettings.json
: tarafından Kestrelkullanılan protokol gibi yapılandırma verilerini içerir. Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.Program.cs
: gRPC hizmetinin giriş noktasını içerir. Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.Startup.cs
: Uygulama davranışını yapılandıran kodu içerir. Daha fazla bilgi için bkz . Uygulama başlatma.
.NET konsol uygulamasında gRPC istemcisi oluşturma
- Visual Studio'nun ikinci bir örneğini açın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda Konsol Uygulaması (.NET Core) öğesini ve ardından İleri'yi seçin.
- Proje adı metin kutusuna GrpcGreeterClient yazın ve Oluştur'u seçin.
Gerekli paketleri ekleme
gRPC istemci projesi aşağıdaki paketleri gerektirir:
- .NET Core istemcisini içeren Grpc.Net.Client.
- C# için protobuf ileti API'lerini içeren Google.Protobuf.
- Protobuf dosyaları için C# araç desteği içeren Grpc.Tools. Araç paketi çalışma zamanında gerekli olmadığından bağımlılık ile
PrivateAssets="All"
işaretlenir.
Paket Yöneticisi Konsolu (PMC) veya NuGet Paketlerini Yönet'i kullanarak paketleri yükleyin.
Paketleri yüklemek için PMC seçeneği
Visual Studio'da Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin
Paket Yöneticisi Konsolu penceresinde, dizinleri dosyaları içeren
GrpcGreeterClient.csproj
klasöre değiştirmek için komutunu çalıştırıncd GrpcGreeterClient
.Aşağıdaki komutları çalıştırın:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Paketleri yüklemek için NuGet Paketlerini Yönet seçeneği
- Çözüm Gezgini> NuGet Paketlerini Yönet'te projeye sağ tıklayın.
- Gözat sekmesini seçin.
- Arama kutusuna Grpc.Net.Client yazın.
- Gözat sekmesinden Grpc.Net.Client paketini ve ardından Yükle'yi seçin.
Google.Protobuf
veGrpc.Tools
için tekrarlayın.
greet.proto ekle
gRPC istemci projesinde bir Protos klasörü oluşturun.
gRPC Greeter hizmetinden Protos\greet.proto dosyasını gRPC istemci projesindeki Protos klasörüne kopyalayın.
Dosyanın içindeki ad alanını
greet.proto
projenin ad alanına güncelleştirin:option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
Proje dosyasını düzenleyin:Projeye sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.
greet.proto dosyasına başvuran bir öğe içeren bir
<Protobuf>
öğe grubu ekleyin:<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter istemcisini oluşturma
- ad alanında türleri oluşturmak için istemci projesini
GrpcGreeterClient
oluşturun.
Not
Türler GrpcGreeterClient
, derleme işlemi tarafından otomatik olarak oluşturulur. Grpc.Tools araç paketi greet.proto dosyasına göre aşağıdaki dosyaları oluşturur:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: İstek ve yanıt ileti türlerini dolduran, serileştiren ve alan protokol arabellek kodu.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Oluşturulan istemci sınıflarını içerir.
Grpc.Tools tarafından otomatik olarak oluşturulan C# varlıkları hakkında daha fazla bilgi için bkz. C#: Oluşturulan C# varlıkları ile gRPC hizmetleri.
gRPC istemci
Program.cs
dosyasını aşağıdaki kodla güncelleştirin:using System; using System.Net.Http; using System.Threading.Tasks; using Grpc.Net.Client; namespace GrpcGreeterClient { class Program { static async Task Main(string[] args) { // The port number(5001) must match the port of the gRPC server. using var channel = GrpcChannel.ForAddress("https://localhost:5001"); var client = new Greeter.GreeterClient(channel); var reply = await client.SayHelloAsync( new HelloRequest { Name = "GreeterClient" }); Console.WriteLine("Greeting: " + reply.Message); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } }
Program.cs
gRPC istemcisinin giriş noktasını ve mantığını içerir.
Greeter istemcisi şu şekilde oluşturulur:
- gRPC hizmetine bağlantı oluşturmaya yönelik bilgileri içeren bir
GrpcChannel
örneği oluşturma. - Greeter istemcisini oluşturmak için komutunu
GrpcChannel
kullanma:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Greeter istemcisi zaman uyumsuz SayHello
yöntemini çağırır. Çağrının SayHello
sonucu görüntülenir:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
gRPC istemcisini gRPC Greeter hizmetiyle test edin
- Greeter hizmetinde, sunucuyu hata ayıklayıcı olmadan başlatmak için basın
Ctrl+F5
. - Projede
GrpcGreeterClient
, istemciyi hata ayıklayıcı olmadan başlatmak için basınCtrl+F5
.
İstemci, hizmete GreeterClient adını içeren bir ileti içeren bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletisini gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:
Greeting: Hello GreeterClient
Press any key to exit...
gRPC hizmeti, başarılı çağrının ayrıntılarını komut istemine yazılan günlüklere kaydeder:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Not
Bu makaledeki kod, gRPC hizmetinin güvenliğini sağlamak için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya The SSL connection could not be established.
iletisiyle The remote certificate is invalid according to the validation procedure.
başarısız olursa geliştirme sertifikasına güvenilmez. Bu sorunu çözmek için bkz . Güvenilmeyen/geçersiz sertifikaya sahip bir gRPC hizmetini çağırma.
Sonraki adımlar
Bu öğreticide .NET Core gRPC istemcisi ve ASP.NET Core gRPC Sunucusu oluşturma gösterilmektedir.
Sonunda gRPC Greeter hizmetiyle iletişim kuran bir gRPC istemciniz olacak.
Örnek kodu görüntüleme veya indirme (indirme).
Bu öğreticide şunları yaptınız:
- gRPC Sunucusu oluşturun.
- Bir gRPC istemcisi oluşturun.
- gRPC istemcisini gRPC Greeter hizmetiyle test edin.
Önkoşullar
- Visual Studio 2019 16.4 ve üzeri ile ASP.NET ve web geliştirme iş yükü
- .NET Core 3.1 SDK
gRPC hizmeti oluşturma
Visual Studio'yu başlatın ve Yeni proje oluştur'u seçin. Alternatif olarak, Visual Studio Dosya menüsünden Yeni Proje'yi> seçin.
Yeni proje oluştur iletişim kutusunda gRPC Hizmeti'ni ve ardından İleri'yi seçin:
Projeye GrpcGreeter adını verin. Kodu kopyalayıp yapıştırdığınızda ad alanlarının eşleşmesi için projeyi GrpcGreeter olarak adlandırmanız önemlidir.
Oluştur'u belirleyin.
Yeni gRPC hizmeti oluştur iletişim kutusunda:
- gRPC Hizmeti şablonu seçilidir.
- Oluştur'u belirleyin.
Hizmeti çalıştırma
Hata ayıklayıcı olmadan çalıştırmak için Ctrl+F5 tuşlarına basın.
Proje henüz SSL kullanmak üzere yapılandırılmamışsa Visual Studio aşağıdaki iletişim kutusunu görüntüler:
IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.
Aşağıdaki iletişim kutusu görüntülenir:
Geliştirme sertifikasına güvenmeyi kabul ediyorsanız Evet'i seçin.
Firefox tarayıcısına güvenme hakkında bilgi için bkz . Firefox SEC_ERROR_INADEQUATE_KEY_USAGE sertifika hatası.
Visual Studio, IIS Express'i başlatır ve uygulamayı çalıştırır. Adres çubuğu gibi
example.com
bir şey değil, gösterilirlocalhost:port#
. Bunun nedenilocalhost
yerel bilgisayarın standart ana bilgisayar adı olmasıdır. Localhost yalnızca yerel bilgisayardan web istekleri sağlar. Visual Studio bir web projesi oluşturduğunda, web sunucusu için rastgele bir bağlantı noktası kullanılır.
Günlükler üzerinde https://localhost:5001
dinleyen hizmeti gösterir.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
Not
gRPC şablonu Aktarım Katmanı Güvenliği 'ni (TLS) kullanacak şekilde yapılandırılmıştır. gRPC istemcilerinin sunucuyu çağırmak için HTTPS kullanması gerekir.
macOS, TLS ile ASP.NET Core gRPC'i desteklemez. macOS üzerinde gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gereklidir. Daha fazla bilgi için bkz . macOS üzerinde ASP.NET Core gRPC uygulaması başlatılamıyor.
Proje dosyalarını inceleme
GrpcGreeter proje dosyaları:
- greet.proto: Protos/greet.proto dosyası gRPC'yi
Greeter
tanımlar ve gRPC sunucu varlıklarını oluşturmak için kullanılır. Daha fazla bilgi için bkz . gRPC'ye giriş. - Hizmetler klasörü: Hizmetin uygulamasını
Greeter
içerir. appsettings.json
: tarafından Kestrelkullanılan protokol gibi yapılandırma verilerini içerir. Daha fazla bilgi için, bkz. ASP.NET Core’da yapılandırma analizi.Program.cs
: gRPC hizmetinin giriş noktasını içerir. Daha fazla bilgi için, bkz. ASP.NET Core'da .NET Genel Ana Bilgisayarı.Startup.cs
: Uygulama davranışını yapılandıran kodu içerir. Daha fazla bilgi için bkz . Uygulama başlatma.
.NET konsol uygulamasında gRPC istemcisi oluşturma
- Visual Studio'nun ikinci bir örneğini açın ve Yeni proje oluştur'u seçin.
- Yeni proje oluştur iletişim kutusunda Konsol Uygulaması (.NET Core) öğesini ve ardından İleri'yi seçin.
- Proje adı metin kutusuna GrpcGreeterClient yazın ve Oluştur'u seçin.
Gerekli paketleri ekleme
gRPC istemci projesi aşağıdaki paketleri gerektirir:
- .NET Core istemcisini içeren Grpc.Net.Client.
- C# için protobuf ileti API'lerini içeren Google.Protobuf.
- Protobuf dosyaları için C# araç desteği içeren Grpc.Tools. Araç paketi çalışma zamanında gerekli olmadığından bağımlılık ile
PrivateAssets="All"
işaretlenir.
Paket Yöneticisi Konsolu (PMC) veya NuGet Paketlerini Yönet'i kullanarak paketleri yükleyin.
Paketleri yüklemek için PMC seçeneği
Visual Studio'da Araçlar>NuGet Paket Yöneticisi> Paket Yöneticisi Konsolu'nu seçin
Paket Yöneticisi Konsolu penceresinde, dizinleri dosyaları içeren
GrpcGreeterClient.csproj
klasöre değiştirmek için komutunu çalıştırıncd GrpcGreeterClient
.Aşağıdaki komutları çalıştırın:
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools
Paketleri yüklemek için NuGet Paketlerini Yönet seçeneği
- Çözüm Gezgini> NuGet Paketlerini Yönet'te projeye sağ tıklayın.
- Gözat sekmesini seçin.
- Arama kutusuna Grpc.Net.Client yazın.
- Gözat sekmesinden Grpc.Net.Client paketini ve ardından Yükle'yi seçin.
Google.Protobuf
veGrpc.Tools
için tekrarlayın.
greet.proto ekle
gRPC istemci projesinde bir Protos klasörü oluşturun.
gRPC Greeter hizmetinden Protos\greet.proto dosyasını gRPC istemci projesindeki Protos klasörüne kopyalayın.
Dosyanın içindeki ad alanını
greet.proto
projenin ad alanına güncelleştirin:option csharp_namespace = "GrpcGreeterClient";
GrpcGreeterClient.csproj
Proje dosyasını düzenleyin:Projeye sağ tıklayın ve Proje Dosyasını Düzenle'yi seçin.
greet.proto dosyasına başvuran bir öğe içeren bir
<Protobuf>
öğe grubu ekleyin:<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
Greeter istemcisini oluşturma
- ad alanında türleri oluşturmak için istemci projesini
GrpcGreeterClient
oluşturun.
Not
Türler GrpcGreeterClient
, derleme işlemi tarafından otomatik olarak oluşturulur. Grpc.Tools araç paketi greet.proto dosyasına göre aşağıdaki dosyaları oluşturur:
GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs
: İstek ve yanıt ileti türlerini dolduran, serileştiren ve alan protokol arabellek kodu.GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs
: Oluşturulan istemci sınıflarını içerir.
Grpc.Tools tarafından otomatik olarak oluşturulan C# varlıkları hakkında daha fazla bilgi için bkz. C#: Oluşturulan C# varlıkları ile gRPC hizmetleri.
gRPC istemci Program.cs
dosyasını aşağıdaki kodla güncelleştirin:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;
namespace GrpcGreeterClient
{
class Program
{
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Program.cs
gRPC istemcisinin giriş noktasını ve mantığını içerir.
Greeter istemcisi şu şekilde oluşturulur:
- gRPC hizmetine bağlantı oluşturmaya yönelik bilgileri içeren bir
GrpcChannel
örneği oluşturma. - Greeter istemcisini oluşturmak için komutunu
GrpcChannel
kullanma:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
Greeter istemcisi zaman uyumsuz SayHello
yöntemini çağırır. Çağrının SayHello
sonucu görüntülenir:
static async Task Main(string[] args)
{
// The port number(5001) must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
gRPC istemcisini gRPC Greeter hizmetiyle test edin
- Greeter hizmetinde, sunucuyu hata ayıklayıcı olmadan başlatmak için basın
Ctrl+F5
. - Projede
GrpcGreeterClient
, istemciyi hata ayıklayıcı olmadan başlatmak için basınCtrl+F5
.
İstemci, hizmete GreeterClient adını içeren bir ileti içeren bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletisini gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:
Greeting: Hello GreeterClient
Press any key to exit...
gRPC hizmeti, başarılı çağrının ayrıntılarını komut istemine yazılan günlüklere kaydeder:
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 78.32260000000001ms 200 application/grpc
Not
Bu makaledeki kod, gRPC hizmetinin güvenliğini sağlamak için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya The SSL connection could not be established.
iletisiyle The remote certificate is invalid according to the validation procedure.
başarısız olursa geliştirme sertifikasına güvenilmez. Bu sorunu çözmek için bkz . Güvenilmeyen/geçersiz sertifikaya sahip bir gRPC hizmetini çağırma.
Sonraki adımlar
ASP.NET Core