Partilhar via


Tutorial: Criar um cliente e um servidor gRPC no ASP.NET Core

Este tutorial mostra como criar um cliente gRPC .NET e um ASP.NET Core gRPC Server. No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio 2022 e selecione Novo projeto.
  • Na caixa de diálogo Criar um novo projeto , procure gRPC. Selecione ASP.NET Serviço gRPC principal e selecione Avançar.
  • Na caixa de diálogo Configurar o novo projeto, digite GrpcGreeter para nome do projeto. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.
  • Selecione Avançar.
  • Na caixa de diálogo Informações adicionais , selecione .NET 9.0 (Suporte de Termo Padrão) e, em seguida, selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    Visual Studio:

    • Inicia o servidor Kestrel.
    • Inicia um navegador.
    • Navega até http://localhost:port, tal como http://localhost:7042.
      • port: um número de porta atribuído aleatoriamente para o aplicativo.
      • localhost: O nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local.

Os registos mostram o serviço a escutar em https://localhost:<port>, onde <port> é o número da porta localhost atribuído aleatoriamente no momento da criação do projeto e definido em Properties/launchSettings.json.

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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor. O número da porta localhost do serviço gRPC é atribuído aleatoriamente quando o projeto é criado e configurado no arquivo Propriedades\launchSettings.js do projeto de serviço gRPC.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • Protos/greet.proto: define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Services pasta: Contém a implementação do serviço Greeter.
  • appSettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs, que contém:

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de console e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Avançar.
  • Na caixa de diálogo Informações adicionais , selecione .NET 9.0 (Suporte de Termo Padrão) e, em seguida, selecione Criar.

Adicionar pacotes NuGet necessários

O projeto de cliente gRPC requer os seguintes pacotes NuGet:

  • Grpc.Net.Client, que contém o cliente .NET.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contêm suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.

  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

  • Atualize o arquivo de cliente Program.cs gRPC com o código a seguir.

    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();
    
  • No código realçado anterior, substitua o número da porta 7042 pelo número da porta HTTPS especificado em Properties/launchSettings.json dentro do projeto de serviço GrpcGreeter.

Program.cs contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
// 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();

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

Atualize o appsettings.Development.json arquivo adicionando as seguintes linhas realçadas:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • No projeto de serviço GrpcGreeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto de GrpcGreeterClient console, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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 HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos

Este tutorial mostra como criar um cliente gRPC .NET e um ASP.NET Core gRPC Server. No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio 2022 e selecione Novo projeto.
  • Na caixa de diálogo Criar um novo projeto , procure gRPC. Selecione ASP.NET Serviço gRPC principal e selecione Avançar.
  • Na caixa de diálogo Configurar o novo projeto, digite GrpcGreeter para nome do projeto. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.
  • Selecione Avançar.
  • Na caixa de diálogo Informações adicionais , selecione .NET 8.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    Visual Studio:

    • Inicia o servidor Kestrel.
    • Inicia um navegador.
    • Navega até http://localhost:port, tal como http://localhost:7042.
      • port: um número de porta atribuído aleatoriamente para o aplicativo.
      • localhost: O nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local.

Os registos mostram o serviço a escutar em https://localhost:<port>, onde <port> é o número da porta localhost atribuído aleatoriamente no momento da criação do projeto e definido em Properties/launchSettings.json.

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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor. O número da porta localhost do serviço gRPC é atribuído aleatoriamente quando o projeto é criado e configurado no arquivo Propriedades\launchSettings.js do projeto de serviço gRPC.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • Protos/greet.proto: define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Services pasta: Contém a implementação do serviço Greeter.
  • appSettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs, que contém:

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de console e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Avançar.
  • Na caixa de diálogo Informações adicionais , selecione .NET 8.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Adicionar pacotes NuGet necessários

O projeto de cliente gRPC requer os seguintes pacotes NuGet:

  • Grpc.Net.Client, que contém o cliente .NET.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contêm suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.

  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

  • Atualize o arquivo de cliente Program.cs gRPC com o código a seguir.

    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();
    
  • No código realçado anterior, substitua o número da porta 7042 pelo número da porta HTTPS especificado em Properties/launchSettings.json dentro do projeto de serviço GrpcGreeter.

Program.cs contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
// 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();

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

Atualize o appsettings.Development.json arquivo adicionando as seguintes linhas realçadas:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • No serviço Greeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto GrpcGreeterClient, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos

Este tutorial mostra como criar um cliente gRPC .NET e um ASP.NET Core gRPC Server. No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio 2022 e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , procure gRPC. Selecione ASP.NET Serviço gRPC principal e selecione Avançar.
  • Na caixa de diálogo Configurar o novo projeto, digite GrpcGreeter para nome do projeto. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.
  • Selecione Avançar.
  • Na caixa de diálogo Informações adicionais, selecione .NET 6.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    Visual Studio:

    • Inicia o servidor Kestrel.
    • Inicia um navegador.
    • Navega até http://localhost:port, tal como http://localhost:7042.
      • port: um número de porta atribuído aleatoriamente para o aplicativo.
      • localhost: O nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local.

Os registos mostram o serviço a escutar em https://localhost:<port>, onde <port> é o número da porta localhost atribuído aleatoriamente no momento da criação do projeto e definido em Properties/launchSettings.json.

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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor. O número da porta localhost do serviço gRPC é atribuído aleatoriamente quando o projeto é criado e configurado no arquivo Propriedades\launchSettings.js do projeto de serviço gRPC.

O macOS não suporta ASP.NET Core gRPC com TLS. É necessária uma configuração adicional para executar com êxito os serviços gRPC no macOS. Para obter mais informações, consulte Não é possível iniciar aplicativo gRPC do ASP.NET Core no macOS.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • Protos/greet.proto: define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Services pasta: Contém a implementação do serviço Greeter.
  • appSettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs, que contém:

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de console e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Avançar.
  • Na caixa de diálogo Informações adicionais, selecione .NET 6.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Adicionar pacotes NuGet necessários

O projeto de cliente gRPC requer os seguintes pacotes NuGet:

  • Grpc.Net.Client, que contém o cliente .NET.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contêm suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.

  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

  • Atualize o arquivo de cliente Program.cs gRPC com o código a seguir.

    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();
    
  • No código realçado anterior, substitua o número da porta 7042 pelo número da porta HTTPS especificado em Properties/launchSettings.json dentro do projeto de serviço GrpcGreeter.

Program.cs contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
// 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();

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

Atualize o appsettings.Development.json arquivo adicionando as seguintes linhas realçadas:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • No serviço Greeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto GrpcGreeterClient, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos

Este tutorial mostra como criar um cliente gRPC .NET e um ASP.NET Core gRPC Server. No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio 2022 e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , procure gRPC. Selecione ASP.NET Serviço gRPC principal e selecione Avançar.
  • Na caixa de diálogo Configurar o novo projeto, digite GrpcGreeter para nome do projeto. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.
  • Selecione Avançar.
  • Na caixa de diálogo Informações adicionais, selecione .NET 6.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    Visual Studio:

    • Inicia o servidor Kestrel.
    • Inicia um navegador.
    • Navega até http://localhost:port, tal como http://localhost:7042.
      • port: um número de porta atribuído aleatoriamente para o aplicativo.
      • localhost: O nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local.

Os registos mostram o serviço a escutar em https://localhost:<port>, onde <port> é o número da porta localhost atribuído aleatoriamente no momento da criação do projeto e definido em Properties/launchSettings.json.

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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor. O número da porta localhost do serviço gRPC é atribuído aleatoriamente quando o projeto é criado e configurado no arquivo Propriedades\launchSettings.js do projeto de serviço gRPC.

O macOS não suporta ASP.NET Core gRPC com TLS. É necessária uma configuração adicional para executar com êxito os serviços gRPC no macOS. Para obter mais informações, consulte Não é possível iniciar aplicativo gRPC do ASP.NET Core no macOS.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • Protos/greet.proto: define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Services pasta: Contém a implementação do serviço Greeter.
  • appSettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs, que contém:

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de console e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Avançar.
  • Na caixa de diálogo Informações adicionais, selecione .NET 6.0 (Suporte de longo prazo) e, em seguida, selecione Criar.

Adicionar pacotes NuGet necessários

O projeto de cliente gRPC requer os seguintes pacotes NuGet:

  • Grpc.Net.Client, que contém o cliente .NET.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contêm suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.

  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

  • Atualize o arquivo de cliente Program.cs gRPC com o código a seguir.

    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();
    
  • No código realçado anterior, substitua o número da porta 7042 pelo número da porta HTTPS especificado em Properties/launchSettings.json dentro do projeto de serviço GrpcGreeter.

Program.cs contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
// 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();

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

  • No serviço Greeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto GrpcGreeterClient, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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

Atualize o appsettings.Development.json arquivo adicionando as seguintes linhas:

"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos

Este tutorial mostra como criar um cliente gRPC .NET e um ASP.NET Core gRPC Server.

No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Visualize ou baixe o código de exemplo (como fazer o download).

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Serviço gRPC e selecione Avançar.
  • Na caixa de diálogo Configurar o novo projeto, digite GrpcGreeter para nome do projeto. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.
  • Selecione Avançar.
  • Na caixa de diálogo Informações adicionais , selecione .NET 5.0 na lista suspensa Target Framework .
  • Selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    O Visual Studio inicia IIS Express e executa o aplicativo. A barra de endereço mostra localhost:port# e não algo como example.com. Isso porque localhost é o nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local. Quando o Visual Studio cria um projeto Web, uma porta aleatória é usada para o servidor Web.

Os logs mostram o serviço escutando em 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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor.

O macOS não suporta ASP.NET Core gRPC com TLS. É necessária uma configuração adicional para executar com êxito os serviços gRPC no macOS. Para obter mais informações, consulte Não é possível iniciar aplicativo gRPC do ASP.NET Core no macOS.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • greet.proto: O arquivo Protos/greet.proto define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Pasta Serviços: Contém a implementação do Greeter serviço.
  • appsettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs: Contém o ponto de entrada para o serviço gRPC. Para mais informações, consulte o Host Genérico do .NET no ASP.NET Core.
  • Startup.cs: Contém código que configura o comportamento do aplicativo. Para obter mais informações, consulte Inicialização do aplicativo.

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de console (.NET) e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Criar.

Adicionar pacotes necessários

O projeto de cliente gRPC requer os seguintes pacotes:

  • Grpc.Net.Client, que contém o cliente .NET.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contém suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

    Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.


  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

  • Atualize o arquivo de cliente Program.cs gRPC com o seguinte código:

    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 contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
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();
}

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

  • No serviço Greeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto GrpcGreeterClient, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos

Este tutorial mostra como criar um cliente gRPC do .NET Core e um ASP.NET Core gRPC Server.

No final, você terá um cliente gRPC que se comunica com o serviço gRPC Greeter.

Visualize ou baixe o código de exemplo (como fazer o download).

Neste tutorial, você:

  • Crie um servidor gRPC.
  • Crie um cliente gRPC.
  • Teste o cliente gRPC com o serviço gRPC Greeter.

Prerequisites

Criar um serviço gRPC

  • Inicie o Visual Studio e selecione Criar um novo projeto. Como alternativa, no menu Arquivo do Visual Studio, selecione Novo>Projeto.

  • Na caixa de diálogo Criar um novo projeto , selecione Serviço gRPC e selecione Avançar:

    Criar uma nova caixa de diálogo de projeto no Visual Studio

  • Nomeie o projeto GrpcGreeter. É importante nomear o projeto GrpcGreeter para que os namespaces correspondam quando você copia e cola o código.

  • Selecione Criar.

  • Na caixa de diálogo Criar um novo serviço gRPC :

    • O modelo gRPC Service está selecionado.
    • Selecione Criar.

Executar o serviço

  • Pressione Ctrl+F5 para executar sem o depurador.

    Visual Studio exibe a seguinte caixa de diálogo quando um projeto ainda não está configurado para usar SSL:

    Este projeto está configurado para usar SSL. Para evitar avisos SSL no navegador, você pode optar por confiar no certificado autoassinado que o IIS Express gerou. Gostaria de confiar no certificado SSL do IIS Express?

    Selecione Sim se confiar no certificado SSL do IIS Express.

    A seguinte caixa de diálogo é exibida:

    Caixa de diálogo de aviso de segurança

    Selecione Sim se concordar em confiar no certificado de desenvolvimento.

    Para obter informações sobre como confiar no navegador Firefox, consulte o erro de certificado SEC_ERROR_INADEQUATE_KEY_USAGE do Firefox na secção .

    O Visual Studio inicia IIS Express e executa o aplicativo. A barra de endereço mostra localhost:port# e não algo como example.com. Isso porque localhost é o nome de host padrão para o computador local. Localhost atende apenas solicitações da Web do computador local. Quando o Visual Studio cria um projeto Web, uma porta aleatória é usada para o servidor Web.

Os logs mostram o serviço escutando em 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

Note

O modelo gRPC está configurado para usar TLS (Transport Layer Security). Os clientes gRPC precisam usar HTTPS para chamar o servidor.

O macOS não suporta ASP.NET Core gRPC com TLS. É necessária uma configuração adicional para executar com êxito os serviços gRPC no macOS. Para obter mais informações, consulte Não é possível iniciar aplicativo gRPC do ASP.NET Core no macOS.

Examinar os arquivos do projeto

GrpcGreeter arquivos de projeto:

  • greet.proto: O arquivo Protos/greet.proto define o Greeter gRPC e é usado para gerar os ativos do servidor gRPC. Para obter mais informações, consulte Introdução ao gRPC.
  • Pasta Serviços: Contém a implementação do Greeter serviço.
  • appsettings.json: Contém dados de configuração, como o protocolo usado pelo Kestrel. Para obter mais informações, consulte Configuração no ASP.NET Core.
  • Program.cs: Contém o ponto de entrada para o serviço gRPC. Para mais informações, consulte o Host Genérico do .NET no ASP.NET Core.
  • Startup.cs: Contém código que configura o comportamento do aplicativo. Para obter mais informações, consulte Inicialização do aplicativo.

Criar o cliente gRPC em um aplicativo de console .NET

  • Abra uma segunda instância do Visual Studio e selecione Criar um novo projeto.
  • Na caixa de diálogo Criar um novo projeto , selecione Aplicativo de Console (.NET Core) e selecione Avançar.
  • Na caixa de texto Nome do projeto , digite GrpcGreeterClient e selecione Criar.

Adicionar pacotes necessários

O projeto de cliente gRPC requer os seguintes pacotes:

  • Grpc.Net.Client, que contém o cliente .NET Core.
  • Google.Protobuf, que contém APIs de mensagem protobuf para C#.
  • Grpc.Tools, que contém suporte a ferramentas C# para arquivos protobuf. O pacote de ferramentas não é necessário em tempo de execução, portanto, a dependência é marcada com PrivateAssets="All".

Instale os pacotes usando o Console do Gerenciador de Pacotes (PMC) ou Gerenciar Pacotes NuGet.

Opção PMC para instalar pacotes

  • No Visual Studio, selecione Ferramentas>NuGet Package Manager>Console do Gerenciador de Pacotes

  • Na janela Console do Gerenciador de Pacotes , execute cd GrpcGreeterClient para alterar os diretórios para a pasta que contém os GrpcGreeterClient.csproj arquivos.

  • Execute os seguintes comandos:

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Opção Gerenciar pacotes NuGet para instalar pacotes

  • Clique com o botão direito do rato no projeto no Explorador de Soluções>Gerir Pacotes NuGet.
  • Selecione a guia Procurar.
  • Digite Grpc.Net.Client na caixa de pesquisa.
  • Selecione o pacote Grpc.Net.Client na guia Procurar e selecione Instalar.
  • Repita para Google.Protobuf e Grpc.Tools.

Adicionar greet.proto

  • Crie uma pasta Protos no projeto de cliente gRPC.

  • Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para a pasta Protos no projeto de cliente gRPC.

  • Atualize o namespace dentro do greet.proto arquivo para o namespace do projeto:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Edite o ficheiro do projeto GrpcGreeterClient.csproj.

    Clique com o botão direito do mouse no projeto e selecione Editar arquivo de projeto.


  • Adicione um grupo de itens com um <Protobuf> elemento que se refira ao arquivo greet.proto :

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

Criar o cliente Greeter

  • Crie o projeto cliente para criar os tipos no GrpcGreeterClient namespace.

Note

Os GrpcGreeterClient tipos são gerados automaticamente pelo processo de compilação. O pacote de ferramentas Grpc.Tools gera os seguintes arquivos com base no arquivo greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: O código de buffer de protocolo que preenche, serializa e recupera os tipos de mensagem de solicitação e resposta.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Contém as classes de cliente geradas.

Para obter mais informações sobre os ativos C# gerados automaticamente pelo Grpc.Tools, consulte Serviços gRPC com C#: ativos C# gerados.

Atualize o arquivo de cliente Program.cs gRPC com o seguinte código:

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 contém o ponto de entrada e a lógica para o cliente gRPC.

O cliente Greeter é criado por:

  • Instanciar um GrpcChannel que contém as informações para estabelecer a conexão com o serviço gRPC.
  • Usando o GrpcChannel para construir o cliente Greeter:
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();
}

O cliente Greeter chama o método assíncrono SayHello . O resultado da SayHello chamada é exibido:

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

Teste o cliente gRPC com o serviço gRPC Greeter

  • No serviço Greeter, pressione Ctrl+F5 para iniciar o servidor sem o depurador.
  • No projeto GrpcGreeterClient, pressione Ctrl+F5 para iniciar o cliente sem o depurador.

O cliente envia uma saudação ao serviço com uma mensagem contendo seu nome, GreeterClient. O serviço envia a mensagem "Hello GreeterClient" como resposta. A resposta "Hello GreeterClient" é exibida no prompt de comando:

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

O serviço gRPC regista os detalhes da chamada bem-sucedida nos logs gravados na linha de comandos.

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

Note

O código neste artigo requer o certificado de desenvolvimento HTTPS ASP.NET Core para proteger o serviço gRPC. Se o cliente gRPC do .NET falhar com a mensagem The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., o certificado de desenvolvimento não é confiável. Para corrigir esse problema, consulte Chamar um serviço gRPC com um certificado não confiável/inválido.

Próximos passos