Öğ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

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ıngRPC. 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 girinGrpcGreeter. 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:

    Bu proje SSL kullanacak şekilde yapılandırılmıştır. Tarayıcıda SSL uyarılarından kaçınmak için IIS Express'in oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi seçebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

    IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.

    Aşağıdaki iletişim kutusu görüntülenir:

    Güvenlik uyarısı iletişim kutusu

    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:7042adresine http://localhost:portgider.
      • 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.jsonayarlandığı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\launch Ayarlar.json dosyasında ayarlandığında rastgele atanır.

Proje dosyalarını inceleme

GrpcGreeter proje dosyaları:

  • Protos/greet.proto: 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ş.
  • 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:

.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:

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 ve Grpc.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 projesinde Properties/launchSettings.jsonGrpcGreeter belirtilen bağlantı noktası numarasıyla HTTPS 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ın Ctrl+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

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ıngRPC. 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 girinGrpcGreeter. 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:

    Bu proje SSL kullanacak şekilde yapılandırılmıştır. Tarayıcıda SSL uyarılarından kaçınmak için IIS Express'in oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi seçebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

    IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.

    Aşağıdaki iletişim kutusu görüntülenir:

    Güvenlik uyarısı iletişim kutusu

    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:7042adresine http://localhost:portgider.
      • 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.jsonayarlandığı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\launch Ayarlar.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'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ş.
  • 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:

.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:

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 ve Grpc.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 projesinde Properties/launchSettings.jsonGrpcGreeter belirtilen bağlantı noktası numarasıyla HTTPS 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ın Ctrl+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

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ıngRPC. 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 girinGrpcGreeter. 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:

    Bu proje SSL kullanacak şekilde yapılandırılmıştır. Tarayıcıda SSL uyarılarından kaçınmak için IIS Express'in oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi seçebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

    IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.

    Aşağıdaki iletişim kutusu görüntülenir:

    Güvenlik uyarısı iletişim kutusu

    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:7042adresine http://localhost:portgider.
      • 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.jsonayarlandığı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\launch Ayarlar.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'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ş.
  • 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:

.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:

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 ve Grpc.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 projesinde Properties/launchSettings.jsonGrpcGreeter belirtilen bağlantı noktası numarasıyla HTTPS 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ın Ctrl+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

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 girinGrpcGreeter. 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:

    Bu proje SSL kullanacak şekilde yapılandırılmıştır. Tarayıcıda SSL uyarılarından kaçınmak için IIS Express'in oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi seçebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

    IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.

    Aşağıdaki iletişim kutusu görüntülenir:

    Güvenlik uyarısı iletişim kutusu

    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.combir şey değil, gösterilirlocalhost:port#. Bunun nedeni localhost 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:5001dinleyen 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:

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 ve Grpc.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ın Ctrl+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

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:

    Visual Studio'da yeni proje oluşturma iletişim kutusu

  • 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:

    Bu proje SSL kullanacak şekilde yapılandırılmıştır. Tarayıcıda SSL uyarılarından kaçınmak için IIS Express'in oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi seçebilirsiniz. IIS Express SSL sertifikasına güvenmek istiyor musunuz?

    IIS Express SSL sertifikasına güveniyorsanız Evet'i seçin.

    Aşağıdaki iletişim kutusu görüntülenir:

    Güvenlik uyarısı iletişim kutusu

    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.combir şey değil, gösterilirlocalhost:port#. Bunun nedeni localhost 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:5001dinleyen 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:

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 ve Grpc.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ın Ctrl+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