Öğretici: ASP.NET Core bir gRPC istemcisi ve sunucusu oluşturma

bu öğreticide, bir .net Core grpc istemcisinin ve bir ASP.NET Core grpc sunucusunun nasıl oluşturulacağı gösterilmektedir. Sonda, gRPC Greeter hizmeti ile iletişim kuran bir gRPC istemcisine sahip olacaksınız.

Bu öğreticide şunları yaptınız:

  • GRPC sunucusu oluşturun.
  • GRPC istemcisi oluşturun.
  • GRPC istemci hizmetini gRPC Greeter hizmeti ile test edin.

Önkoşullar

GRPC hizmeti oluşturma

  • Visual Studio 2022 ' u başlatın ve yeni proje oluştur' u seçin.
  • Yeni proje oluştur iletişim kutusunda için arama yapın gRPC . ASP.NET Core grpc hizmetini seçip ileri ' yi seçin.
  • yeni projenizi yapılandırın iletişim kutusunda GrpcGreeter Project adı girin. Kodu kopyaladığınızda ve yapıştırdığınızda ad alanlarının eşleşmesi için, proje Grpcgreeter adında bir ad vermek önemlidir.
  • İleri’yi seçin.
  • Ek bilgi iletişim kutusunda .net 6,0 (Önizleme) öğesini seçin 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.

    Visual Studio bir proje SSL kullanmak için henüz yapılandırılmadığında aşağıdaki iletişim kutusunu görüntüler:

    Bu proje SSL kullanmak üzere yapılandırılmış. tarayıcıdaki SSL uyarılarını önlemek için IIS Express oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi tercih edebilirsiniz. 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 hatası.

    Visual Studio:

    • KestrelSunucuyu başlatır.
    • Bir tarayıcı başlatır.
    • , Gibi öğesine gider http://localhost:port http://localhost:7042 .
      • bağlantı noktası: uygulama için rastgele atanan bir bağlantı noktası numarası.
      • localhost: Yerel bilgisayar için Standart ana bilgisayar adı. Localhost yalnızca yerel bilgisayardan Web isteklerine hizmet verir.

Günlükler hizmeti dinlediği hizmetini gösterir https://localhost:7042 .

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:7042
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 (TLS)kullanmak üzere 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 hizmeti projesinin Properties\launchSettings.JSON dosyasında ayarlandığında rastgele atanır.

macos, TLS ile ASP.NET Core grpc 'yi desteklemez. MacOS 'ta gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gerekir. daha fazla bilgi için bkz. macos üzerinde grpc uygulaması ASP.NET Core başlatılamıyor.

Proje dosyalarını inceleyin

Grpcgreeter proje dosyaları:

  • Prototips/Greet. proto: Greeter GRPC 'Yi 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ı içerir Greeter .
  • appSettings. JSON: tarafından kullanılan protokol gibi yapılandırma verilerini içerir Kestrel . Daha fazla bilgi için bkz. ASP.NET Core'de yapılandırma.
  • Şunu içeren program. cs:

Bir .NET konsol uygulamasında gRPC istemcisini oluşturma

  • ikinci bir Visual Studio örneğini açın ve yeni proje oluştur' u seçin.
  • Yeni proje oluştur Iletişim kutusunda konsol uygulaması' nı seçin ve İleri' yi seçin.
  • Project ad metin kutusuna grpcgreeterclient girin ve ileri' yi seçin.
  • Ek bilgi iletişim kutusunda .net 6,0 (Önizleme) öğesini seçin ve ardından Oluştur' u seçin.

gerekli NuGet paketlerini ekle

grpc istemci projesi aşağıdaki NuGet paketlerini gerektirir:

  • .NET Core istemcisini içeren GRPC .net. Client.
  • C# için prototipsiz ileti API 'Leri içeren Google. Protoarabellek.
  • Prototipleme dosyaları için C# araçları desteği içeren GRPC. Tools. Araç çalışma zamanında gerekli değildir, bu nedenle bağımlılık ile işaretlenir PrivateAssets="All" .

Paket Yöneticisi konsolunu (PMC) kullanarak veya NuGet paketlerini yönetmek için paketleri yükler.

Paket yüklemek için PMC seçeneği

  • Visual Studio, araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi konsolunu seçin

  • Paket Yöneticisi konsol penceresinde, cd GrpcGreeterClient dizini grpcgreeterclient. csproj dosyalarını içeren klasöre değiştirmek için komutunu çalıştırın.

  • 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önetmek için projeye sağ tıklayın.
  • Gözat sekmesini seçin.
  • Arama kutusuna GRPC .net. Client girin.
  • Araştır sekmesinden GRPC .net. Client paketini seçin ve ardından Install' ı seçin.
  • Ve için Google.Protobuf tekrarlayın Grpc.Tools .

Greet. proto Ekle

  • GRPC istemci projesinde bir Prototips klasörü oluşturun.

  • Protos\bilgisem. proto dosyasını GRPC Greeter hizmetinden GRPC Istemci projesindeki prototips 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 Project dosyayı düzenle' yi seçin.

  • <Protobuf> Greet. proto dosyasına başvuran bir öğesi olan bir öğe grubu ekleyin:

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Greeter istemcisini oluşturma

  • Ad alanındaki türleri oluşturmak için istemci projesi oluşturun GrpcGreeter . GrpcGreeterTürler yapı işlemi tarafından otomatik olarak oluşturulur.

  • 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();
    

Program. cs , GRPC istemcisinin giriş noktasını ve mantığını içerir.

Greeter istemcisi şu şekilde oluşturulur:

  • GrpcChannelGRPC hizmetine bağlantı oluşturmak için bilgileri içeren bir örneği oluşturma.
  • GrpcChannelGreeter istemcisini oluşturmak için kullanarak:
// 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 yöntemi çağırır SayHello . SayHelloÇağrının 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 hizmeti ile test etme

  • Greeter hizmetinde, Ctrl+F5 hata ayıklayıcı olmadan sunucuyu başlatmak için tuşuna basın.
  • GrpcGreeterClientProjede, Ctrl+F5 hata ayıklayıcı olmadan istemcisini başlatmak için tuşuna basın.

İstemci, adı Greeterclient olan bir iletiyle hizmete bir tebrik gönderir. Hizmet, "Hello GreeterClient" iletisini yanıt olarak gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:

Greeting: Hello GreeterClient
Press any key to exit...

GRPC hizmeti, komut istemine yazılan günlüklerde başarılı çağrının ayrıntılarını kaydeder:

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:7042
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:7042/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 hizmetini güvenli hale getirmek için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi iletiyle başarısız olursa The remote certificate is invalid according to the validation procedure. veya The SSL connection could not be established. geliştirme sertifikası güvenilir olmaz. Bu sorunu onarmak için bkz. Güvenilmeyen/geçersiz sertifikayla gRPC hizmeti çağırma.

Uyarı

ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .

Sonraki adımlar

bu öğreticide, bir .net Core grpc istemcisinin ve bir ASP.NET Core grpc sunucusunun nasıl oluşturulacağı gösterilmektedir.

Sonda, gRPC Greeter hizmeti ile iletişim kuran bir gRPC istemcisine sahip olacaksınız.

Örnek kodu görüntüleyin veya indirin (nasıl indirilir).

Bu öğreticide şunları yaptınız:

  • GRPC sunucusu oluşturun.
  • GRPC istemcisi oluşturun.
  • GRPC istemci hizmetini gRPC Greeter hizmeti ile test edin.

Önkoşullar

GRPC hizmeti oluşturma

  • Visual Studio başlatın ve yeni proje oluştur' u seçin.
  • Yeni proje oluştur Iletişim kutusunda GRPC hizmeti ' ni seçin ve İleri' yi seçin.
  • yeni projenizi yapılandırın iletişim kutusunda GrpcGreeter Project adı girin. Kodu kopyaladığınızda ve yapıştırdığınızda ad alanlarının eşleşmesi için, proje Grpcgreeter adında bir ad vermek önemlidir.
  • İleri’yi seçin.
  • Ek bilgi Iletişim kutusunda hedef çerçeve açılan menüsünde .NET 5,0 ' i seçin.
  • 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.

    Visual Studio bir proje SSL kullanmak için henüz yapılandırılmadığında aşağıdaki iletişim kutusunu görüntüler:

    Bu proje SSL kullanmak üzere yapılandırılmış. tarayıcıdaki SSL uyarılarını önlemek için IIS Express oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi tercih edebilirsiniz. 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 hatası.

    Visual Studio uygulamayı IIS Express ve çalıştırır. Adres çubuğu gibi localhost:port# bir şey değil, example.com gösterir. Bunun nedeni yerel localhost bilgisayarın standart ana bilgisayar adıdır. Localhost yalnızca yerel bilgisayardan gelen web isteklerine hizmet verir. Visual Studio bir web projesi oluşturduğunda, web sunucusu için rastgele bir bağlantı noktası kullanılır.

Günlükler hizmeti dinlediği hizmetini gösterir https://localhost:5001 .

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 (TLS)kullanmak üzere yapılandırılmıştır. gRPC istemcilerinin, sunucuyu çağırmak için HTTPS kullanması gerekir.

macos, TLS ile ASP.NET Core grpc 'yi desteklemez. MacOS 'ta gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gerekir. daha fazla bilgi için bkz. macos üzerinde grpc uygulaması ASP.NET Core başlatılamıyor.

Proje dosyalarını inceleyin

Grpcgreeter proje dosyaları:

  • Greet. proto: prototips/Greet. proto dosyası Greeter gRPC 'yi 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ı içerir Greeter .
  • appSettings. JSON: tarafından kullanılan protokol gibi yapılandırma verilerini içerir Kestrel . Daha fazla bilgi için bkz. ASP.NET Core'de yapılandırma.
  • Program. cs: GRPC hizmeti için giriş noktasını içerir. Daha fazla bilgi için bkz. ASP.NET Core .NET genel ana bilgisayarı.
  • Startup. cs: uygulama davranışını yapılandıran kodu içerir. Daha fazla bilgi için bkz. uygulama başlatma.

Bir .NET konsol uygulamasında gRPC istemcisini oluşturma

  • ikinci bir Visual Studio örneğini açın ve yeni proje oluştur' u seçin.
  • Yeni proje oluştur Iletişim kutusunda konsol uygulaması (.NET Core) öğesini seçin ve İleri' yi seçin.
  • Project ad metin kutusuna grpcgreeterclient girin ve oluştur' u seçin.

Gerekli paketleri Ekle

GRPC istemci projesi aşağıdaki paketleri gerektirir:

  • .NET Core istemcisini içeren GRPC .net. Client.
  • C# için prototipsiz ileti API 'Leri içeren Google. Protoarabellek.
  • Prototipleme dosyaları için C# araçları desteği içeren GRPC. Tools. Araç çalışma zamanında gerekli değildir, bu nedenle bağımlılık ile işaretlenir PrivateAssets="All" .

Paket Yöneticisi konsolunu (PMC) kullanarak veya NuGet paketlerini yönetmek için paketleri yükler.

Paket yüklemek için PMC seçeneği

  • Visual Studio, araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi konsolunu seçin

  • Paket Yöneticisi konsol penceresinde, cd GrpcGreeterClient dizini grpcgreeterclient. csproj dosyalarını içeren klasöre değiştirmek için komutunu çalıştırın.

  • 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önetmek için projeye sağ tıklayın.
  • Gözat sekmesini seçin.
  • Arama kutusuna GRPC .net. Client girin.
  • Araştır sekmesinden GRPC .net. Client paketini seçin ve ardından Install' ı seçin.
  • Ve için Google.Protobuf tekrarlayın Grpc.Tools .

Greet. proto Ekle

  • GRPC istemci projesinde bir Prototips klasörü oluşturun.

  • Protos\bilgisem. proto dosyasını GRPC Greeter hizmetinden GRPC Istemci projesindeki prototips 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 Project dosyayı düzenle' yi seçin.


  • <Protobuf> Greet. proto dosyasına başvuran bir öğesi olan bir öğe grubu ekleyin:

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Greeter istemcisini oluşturma

Ad alanındaki türleri oluşturmak için istemci projesi oluşturun GrpcGreeter . GrpcGreeterTürler yapı işlemi tarafından otomatik olarak oluşturulur.

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:

  • GrpcChannelGRPC hizmetine bağlantı oluşturmak için bilgileri içeren bir örneği oluşturma.
  • GrpcChannelGreeter istemcisini oluşturmak için kullanarak:
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 yöntemi çağırır SayHello . SayHelloÇağrının 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 hizmeti ile test etme

  • Greeter hizmetinde, Ctrl+F5 hata ayıklayıcı olmadan sunucuyu başlatmak için tuşuna basın.
  • GrpcGreeterClientProjede, Ctrl+F5 hata ayıklayıcı olmadan istemcisini başlatmak için tuşuna basın.

İstemci, adı Greeterclient olan bir iletiyle hizmete bir tebrik gönderir. Hizmet, "Hello GreeterClient" iletisini yanıt olarak gönderir. Komut isteminde "Hello GreeterClient" yanıtı görüntülenir:

Greeting: Hello GreeterClient
Press any key to exit...

GRPC hizmeti, komut istemine yazılan günlüklerde başarılı çağrının ayrıntılarını 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 hizmetini güvenli hale getirmek için ASP.NET Core HTTPS geliştirme sertifikası gerektirir. .NET gRPC istemcisi iletiyle başarısız olursa The remote certificate is invalid according to the validation procedure. veya The SSL connection could not be established. geliştirme sertifikası güvenilir olmaz. Bu sorunu onarmak için bkz. Güvenilmeyen/geçersiz sertifikayla gRPC hizmeti çağırma.

Uyarı

ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .

Sonraki adımlar

bu öğreticide, bir .net Core grpc istemcisinin ve bir ASP.NET Core grpc sunucusunun nasıl oluşturulacağı gösterilmektedir.

Sonda, gRPC Greeter hizmeti ile iletişim kuran bir gRPC istemcisine sahip olacaksınız.

Örnek kodu görüntüleyin veya indirin (nasıl indirilir).

Bu öğreticide şunları yaptınız:

  • GRPC sunucusu oluşturun.
  • GRPC istemcisi oluşturun.
  • GRPC istemci hizmetini gRPC Greeter hizmeti ile test edin.

Önkoşullar

GRPC hizmeti oluşturma

  • Visual Studio başlatın ve yeni proje oluştur' u seçin. alternatif olarak, Visual Studio dosya menüsünde yeni > Project' yi seçin.

  • Yeni proje oluştur Iletişim kutusunda GRPC hizmeti ' ni seçin ve İleri' yi seçin:

    Visual Studio yeni bir proje iletişim kutusu oluşturma

  • Projeyi Grpcgreeter olarak adlandırın. Kodu kopyaladığınızda ve yapıştırdığınızda ad alanlarının eşleşmesi için, proje Grpcgreeter adında bir ad vermek önemlidir.

  • Oluştur’u seçin.

  • Yeni bir gRPC hizmeti oluştur iletişim kutusunda:

    • GRPC hizmeti şablonu seçilidir.
    • 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.

    Visual Studio bir proje SSL kullanmak için henüz yapılandırılmadığında aşağıdaki iletişim kutusunu görüntüler:

    Bu proje SSL kullanmak üzere yapılandırılmış. tarayıcıdaki SSL uyarılarını önlemek için IIS Express oluşturduğu otomatik olarak imzalanan sertifikaya güvenmeyi tercih edebilirsiniz. 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 hatası.

    Visual Studio uygulamayı IIS Express ve çalıştırır. Adres çubuğu gibi localhost:port# bir şey değil, example.com gösterir. Bunun nedeni yerel localhost bilgisayarın standart ana bilgisayar adıdır. Localhost yalnızca yerel bilgisayardan gelen web isteklerine hizmet verir. Visual Studio bir web projesi oluşturduğunda, web sunucusu için rastgele bir bağlantı noktası kullanılır.

Günlükler hizmeti dinlediği hizmetini gösterir https://localhost:5001 .

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 (TLS)kullanmak üzere yapılandırılmıştır. gRPC istemcilerinin, sunucuyu çağırmak için HTTPS kullanması gerekir.

macos, TLS ile ASP.NET Core grpc 'yi desteklemez. MacOS 'ta gRPC hizmetlerini başarıyla çalıştırmak için ek yapılandırma gerekir. daha fazla bilgi için bkz. macos üzerinde grpc uygulaması ASP.NET Core başlatılamıyor.

Proje dosyalarını inceleyin

Grpcgreeter proje dosyaları:

  • Greet. proto: prototips/Greet. proto dosyası Greeter gRPC 'yi 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ı içerir Greeter .
  • appSettings. JSON: tarafından kullanılan protokol gibi yapılandırma verilerini içerir Kestrel . Daha fazla bilgi için bkz. ASP.NET Core'de yapılandırma.
  • Program. cs: GRPC hizmeti için giriş noktasını içerir. Daha fazla bilgi için bkz. ASP.NET Core .NET genel ana bilgisayarı.
  • Startup. cs: uygulama davranışını yapılandıran kodu içerir. Daha fazla bilgi için bkz. uygulama başlatma.

Bir .NET konsol uygulamasında gRPC istemcisini oluşturma

  • ikinci bir Visual Studio örneğini açın ve yeni proje oluştur' u seçin.
  • Yeni proje oluştur Iletişim kutusunda konsol uygulaması (.NET Core) öğesini seçin ve İleri' yi seçin.
  • Project ad metin kutusuna grpcgreeterclient girin ve oluştur' u seçin.

Gerekli paketleri Ekle

GRPC istemci projesi aşağıdaki paketleri gerektirir:

  • .NET Core istemcisini içeren GRPC .net. Client.
  • C# için prototipsiz ileti API 'Leri içeren Google. Protoarabellek.
  • Prototipleme dosyaları için C# araçları desteği içeren GRPC. Tools. Araç çalışma zamanında gerekli değildir, bu nedenle bağımlılık ile işaretlenir PrivateAssets="All" .

Paket Yöneticisi konsolunu (PMC) kullanarak veya NuGet paketlerini yönetmek için paketleri yükler.

Paket yüklemek için PMC seçeneği

  • Visual Studio, araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi konsolunu seçin

  • Paket Yöneticisi konsol penceresinde, cd GrpcGreeterClient dizini grpcgreeterclient. csproj dosyalarını içeren klasöre değiştirmek için komutunu çalıştırın.

  • 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önetmek için projeye sağ tıklayın.
  • Gözat sekmesini seçin.
  • Arama kutusuna GRPC .net. Client girin.
  • Araştır sekmesinden GRPC .net. Client paketini seçin ve ardından Install' ı seçin.
  • Ve için Google.Protobuf tekrarlayın Grpc.Tools .

Greet. proto Ekle

  • GRPC istemci projesinde bir Prototips klasörü oluşturun.

  • Protos\bilgisem. proto dosyasını GRPC Greeter hizmetinden GRPC Istemci projesindeki prototips 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 Project dosyayı düzenle' yi seçin.


  • <Protobuf> Greet. proto dosyasına başvuran bir öğesi olan bir öğe grubu ekleyin:

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Greeter istemcisini oluşturma

Ad alanındaki türleri oluşturmak için istemci projesi oluşturun GrpcGreeter . GrpcGreeterTürler yapı işlemi tarafından otomatik olarak oluşturulur.

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:

  • GrpcChannelGRPC hizmetine bağlantı oluşturmak için bilgileri içeren bir örneği oluşturma.
  • GrpcChannelGreeter istemcisini oluşturmak için kullanarak:
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 yöntemi çağırır SayHello . SayHelloÇağrının 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 hizmeti ile test etme

  • Greeter hizmetinde, Ctrl+F5 hata ayıklayıcı olmadan sunucuyu başlatmak için tuşuna basın.
  • GrpcGreeterClientProjede, Ctrl+F5 hata ayıklayıcı olmadan istemcisini başlatmak için tuşuna basın.

İstemci, adı GreeterClient olan bir iletiyle birlikte hizmete bir selamlama gönderir. Hizmet yanıt olarak "Hello GreeterClient" iletiyi 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 ASP.NET Core için https geliştirme sertifikası gerektirir. .NET gRPC istemcisi veya iletisiyle The remote certificate is invalid according to the validation procedure. başarısız The SSL connection could not be established. olursa, geliştirme sertifikasına güvenilmiyor. Bu sorunu düzeltmek için bkz. Güvenilmeyen/geçersiz sertifika ile gRPC hizmetini çağırma.

Uyarı

ASP.NET Core GRPC'nin, Azure App Service IIS ile birlikte Azure App Service gerekir. gRPC'nin nerede kullanılabı hakkında daha fazla bilgi için .NET'de desteklenen platformlarda gRPC bkz. .

Sonraki adımlar