Serviços gRPC no ASP.NET Core \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 12 Horas 

 51 Min 

 28 Seg 

   Tempo restante da oferta: 12 51 28 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Serviços gRPC no ASP.NET Core  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

# Serviços gRPC no ASP.NET Core

 Aprenda o que é gRPC e como criar um serviço com esta tecnologia no ASP.NET Core.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/16113045/GRPC.png)  

No âmbito de aplicações, quando estamos falando de serviços, o desenvolvedor imagina uma [API RESTful](https://www.treinaweb.com.br/blog/o-que-e-uma-api/). Não dá para negar que o casamento de [HTTP+JSON](https://www.treinaweb.com.br/blog/o-que-e-json/) faz um grande sucesso, mas em alguns momentos esta combinação possui limitações.

Em larga escala, ou quando se lida com aplicações críticas, a performance de uma API REST pode significar seu gargalo, principalmente quando estamos lidando com microserviços. É por causa disso que grandes empresas, como Netflix, Digital Ocean, SoundClound e Google, optaram pelo **gRPC** para melhorar e otimizar a comunicação dos seus microserviços.

O [gRPC](https://grpc.io/) é um framework RPC open source criado pelo Google, como forma de melhorar a comunicação do grande número de microserviços que possuem. Com suporte à várias linguagens, na versão 3.0 do .NET Core 3.0, a Microsoft adicionou um template que facilita a criação de serviços gRPC.

Antes de conhecer este template e criar um serviço, você precisa conhecer mais sobre o gRPC.

[  ![C# (C Sharp) - APIs REST com ASP.NET Web API](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) - APIs REST com ASP.NET Web API Conhecer o curso ](https://www.treinaweb.com.br/curso/c-sharp-apis-rest-com-asp-net-web-api)

## O que seria o gRPC?

Como dito, o gRPC é um framework RPC. O RPC é a sigla de *Remote Procedure Call*, chamada de procedimento remoto, que basicamente trata-se de uma tecnologia para comunicação de processos. Permitindo que um computador possa invocar um procedimento de outro computador, independente da linguagem ou plataforma.

No [manifesto de motivação e princípios](https://grpc.io/blog/principles/) do gRPC o Google conta que já utilizava uma infraestrutura RPC denominada Stubby. Mas por ser muito associada a infraestrutura da empresa e não ser baseado em nenhum padrão, ela não poderia ser aberta a todos. Com o advento do [HTTP/2](https://www.treinaweb.com.br/blog/http-2-o-que-voce-deve-saber/), o Stubby foi refeito e nasceu o gRPC, que hoje é parte da CNCF, Cloud Native Computer Foundation.

## Porque o HTTP/2 é importante?

O gRPC não trabalha sob o protocolo [HTTP 1.1](https://www.treinaweb.com.br/blog/o-que-e-http-request-get-post-response-200-404/), que é o protocolo utilizado por todos os servidores web, devido suas limitações. A principal é a forma que as solicitações são tratadas.

Por mais que não seja aparente, no HTTP 1.1 um servidor só pode receber e responder uma requisição por vez. Para tentar contornar este limite, ele trabalha com paralelismo, mas o canal de comunicação trabalha em apenas uma via. Quando está recebendo não pode enviar e vice-versa.

Já no HTTP/2 as conexões são “multiplexadas” (multiplex), o que significa que trabalha de forma bidirecional, recebendo e enviando várias solicitações ao mesmo tempo.

As duas imagens abaixo ilustram este cenário:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/12/16113826/http-2-multiplexing.png)

![](https://dkrn4sk0rn31v.cloudfront.net/2019/12/16113827/http2multiplexing.png)

Aqui é importante ressaltar que devido ao uso do HTTP/2, um serviço do gRPC só pode ser hospedado em um servidor que fornece suporte a esta versão do protocolo. Felizmente na versão 3.0 do .NET Core, o Kestrel passou a suportar esta versão.

Para conhecer as características deste tipo de serviço, vamos colocar a mão na massa.

## Criando um serviço gRPC no ASP.NET Core

A partir da versão 3.0 do .NET core é possível criar um serviço gRPC através do comando abaixo:

```dos
dotnet new grpc -o ServicoGrpc

```

Ou no Visual Studio 2019, selecione o template **gRPC Service**.

A aplicação criada terá a estrutura abaixo:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/12/16113038/servico_grpc_1.png)

Vamos ver em detalhes seus arquivos.

### Contrato com Protobuf

Dentro da pasta **Protos** temos o arquivo **greet.proto**:

```protobuf
syntax = "proto3";

option csharp_namespace = "ServicoGrpc";

package Greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

```

Este é o arquivo de contrato. Baseado no padrão Protobuf, ele que definirá a estrutura do serviço gRPC e precisa existir no cliente e no servidor. É a partir dele que o gRPC irá gerar as operações do serviço.

Acima é definido dentro do pacote `Greet` um serviço `Greeter`, que contém uma operação, `SayHello`. Em seguida é definida a estrutura dos dados recebidos na solicitação e os dados retornados.

Nos bastidores, a biblioteca do gRPC, `Grpc.AspNetCore`, irá criar classes, que nos permitirá definir o serviço no C#.

### Serviços

Os serviços são definidos dentro da pasta **Services**, que no momento possui apenas a classe `GreeterService`:

```csharp
public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger _logger;
    public GreeterService(ILogger logger)
    {
        _logger = logger;
    }

    public override Task SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReply
        {
            Message = "Hello " + request.Name
        });
    }
}

```

Esta classe herda `Greeter.GreeterBase`, que foi gerada pelo gRPC com base no arquivo .proto. O mesmo ocorreu com as classes `HelloRequest` e `HelloReply`.

### Servidor

Por fim, no arquivo **appsettings.json** é definido que o Kestrel utilizará o protocolo HTTP/2:

```json
"Kestrel": {
  "EndpointDefaults": {
    "Protocols": "Http2"
  }
}

```

E na classe `Startup`, além de registrar o serviço gRPC, cria-se um fallback para caso de o usuário acessar o serviço pelo navegador ou utilizando um client sem suporte ao gRPC:

```csharp
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddGrpc();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGrpcService();

            endpoints.MapGet("/", async context =>
            {
                await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
            });
        });
    }
}

```

### Cliente

Para acessar um serviço gRPC necessitamos de um cliente com suporte a este tipo de serviço, para isso, irei utilizar uma aplicação console simples:

```
class Program
{
    static async Task Main(string[] args)
    {
        var channel = GrpcChannel.ForAddress("https://localhost:5001");
        var client =  new Greeter.GreeterClient(channel);
        var reply = await client.SayHelloAsync(
                        new HelloRequest { Name = "Treinaweb Blog" });
        Console.WriteLine("Saudacao: " + reply.Message);
        Console.WriteLine("Pressione qualquer coisa para sair...");
        Console.ReadKey();
    }
}

```

Que precisa referenciar as bibliotecas `Google.Protobuf`, `Grpc.Net.Client` e `Grpc.Tools`:

```xml

    runtime; build; native; contentfiles; analyzers; buildtransitive
    all

```

Além claro do arquivo **greet.proto** definido do servidor:

```xml

```

No servidor, o atributo `GrpcServices` é definido com o valor `Server`.

Ao executar ambas as aplicações, inicialmente o serviço e por fim o cliente, poderemos ver a comunicação sendo realizada:

![](https://dkrn4sk0rn31v.cloudfront.net/2019/12/16113037/servico_grpc_2.png)

[  ![ASP.NET Core - Autenticação e Autorização com Identity](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/aspnet-core.svg)   Curso ASP.NET Core - Autenticação e Autorização com Identity Conhecer o curso ](https://www.treinaweb.com.br/curso/aspnet-core-autenticacao-e-autorizacao-com-identity)

## Conclusão

No momento há poucos servidores web com suporte ao gRPC, mas esta tecnologia possui muito potencial. Em uma arquitetura de microserviços é altamente recomendado que ela seja utilizada para a comunicação entre os microserviços. Neste ambiente a comunicação externa pode se manter com a tradicional combinação HTTP+JSON.

Até a próxima.

- [ #C# ](https://www.treinaweb.com.br/blog/tag/csharp)
- [ #Web API ](https://www.treinaweb.com.br/blog/tag/web-api)
- [ #API REST ](https://www.treinaweb.com.br/blog/tag/api-rest)
- [ #.NET Core 3.0 ](https://www.treinaweb.com.br/blog/tag/net-core-3-0)
- [ #Microservices ](https://www.treinaweb.com.br/blog/tag/microservices)
- [ #gRPC ](https://www.treinaweb.com.br/blog/tag/grpc)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/08/18151850/serviços-gratuitos-google-cloud-400x280.png)  [ Google Cloud Platform (GCP) ](https://www.treinaweb.com.br/blog/categoria/google-cloud-platform-gcp) 

     8 anos atrás

    ##  [ Serviços gratuitos do Google Cloud Platform ](https://www.treinaweb.com.br/blog/servicos-gratuitos-do-google-cloud-platform) 

     Conheça os principais serviços gratuitos do Google Cloud Platform e seus limites de uso.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/soa-400x280.png)  [ Arquitetura de Software ](https://www.treinaweb.com.br/blog/categoria/arquitetura-de-software) 

     10 anos atrás

    ##  [ Você sabe o que é Arquitetura Orientada a Serviços (SOA)? ](https://www.treinaweb.com.br/blog/voce-sabe-o-que-e-arquitetura-orientada-a-servicos-soa) 

     A aplicação de tecnologias geram resultados concretos para as organizações. A arquitetura SOA é um bom recurso para atender a esses objetivos.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/09/teste-os-principais-cms-do-mercado-sem-precisar-instala-los-ou-pagar-para-hospeda-los-400x280.png)  [ CMS's e E-commerce ](https://www.treinaweb.com.br/blog/categoria/cmss-e-e-commerce) 

     9 anos atrás

    ##  [ Teste os principais CMS's do mercado sem precisar instalá-los ou pagar para hospedá-los ](https://www.treinaweb.com.br/blog/teste-os-principais-cms-do-mercado-sem-precisar-instala-los-ou-pagar-para-hospeda-los) 

     Veja alguns dos serviços oficiais de hospedagem e teste gratuito de algumas das principais plataformas de conteúdo do momento.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/07/capa-circuit-breaker-400x280.png)  [ Padrões de Projeto ](https://www.treinaweb.com.br/blog/categoria/padroes-de-projeto) 

     6 anos atrás

    ##  [ O que é Circuit Breaker? ](https://www.treinaweb.com.br/blog/o-que-e-circuit-breaker) 

     A ação de usuários disparam diversos serviços que podem falhar ou ficar indisponíveis. Conheça neste artigo o Circuit Breaker e como ele nos auxilia nesse quesito.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ Conheça o padrão arquitetural Porto para aplicações back-end ](https://www.treinaweb.com.br/blog/conheca-o-padrao-arquitetural-porto-para-aplicacoes-back-end) 

     Conheça o padrão arquitetural Porto! Voltado para aplicações back-end, ele permite escrever monolitos que podem ser facilmente migrados para micro serviços.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/o-que-e-cdn-content-delivery-network-400x280.png)  [ Computação em nuvem ](https://www.treinaweb.com.br/blog/categoria/computacao-em-nuvem) 

     6 anos atrás

    ##  [ O que é CDN (Content Delivery Network)? ](https://www.treinaweb.com.br/blog/o-que-e-cdn-content-delivery-network) 

     Vamos conhecer nesse artigo o que é um CDN, como ele funciona, quais suas vantagens e os principais serviços do mercado que entregam soluções de CDN para você usar nas suas aplicações.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/24120107/streams-400x280.jpg)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     7 anos atrás

    ##  [ Stream Wrappers personalizados no PHP ](https://www.treinaweb.com.br/blog/stream-wrappers-personalizados-no-php) 

     Veja como Stream Wrappers personalizados podem ser criados em PHP para se trabalhar com streams usando as funções nativas da linguagem. A SDK para PHP da AWS e do Google Cloud utilizam, bem como outros serviços.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/02/12200152/serverless-400x280.png)  [ Computação em nuvem ](https://www.treinaweb.com.br/blog/categoria/computacao-em-nuvem) 

     8 anos atrás

    ##  [ Serverless: uma introdução ](https://www.treinaweb.com.br/blog/serverless-uma-introducao) 

     Nesse artigo uma introdução à arquitetura Serverless e um pouco sobre o AWS Lambda, um dos principais serviços do mercado.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/04/16144257/conheca-o-google-cloud-platform-400x280.png)  [ Google Cloud Platform (GCP) ](https://www.treinaweb.com.br/blog/categoria/google-cloud-platform-gcp) 

     9 anos atrás

    ##  [ Conheça o Google Cloud Platform ](https://www.treinaweb.com.br/blog/conheca-o-google-cloud-platform) 

     O Google Cloud Platform é o serviço de computação em nuvem do Google. Ele possui uma quantidade enorme de serviços para as mais diversas áreas. Veja seus principais conceitos e como testá-lo gratuitamente.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/09/conheca-as-novidades-que-estao-por-vir-no-android-studio-3-400x280.jpg)  [ Android ](https://www.treinaweb.com.br/blog/categoria/android) 

     9 anos atrás

    ##  [ Conheça as novidades que estão por vir no Android Studio 3.0 ](https://www.treinaweb.com.br/blog/conheca-as-novidades-que-estao-por-vir-no-android-studio-3) 

     Veja as principais novidades e atualizações que a equipe de desenvolvedores do Android Studio preparou para a versão 3.0.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/11/07161636/introducao-a-aws-400x280.png)  [ Amazon ](https://www.treinaweb.com.br/blog/categoria/amazon) 

     8 anos atrás

    ##  [ Introdução à Amazon Web Services (AWS) ](https://www.treinaweb.com.br/blog/introducao-a-amazon-web-services-aws) 

     A Amazon Web Services (AWS) é uma das principais plataformas de computação em nuvem do mercado. Aprenda os principais conceitos e veja como criar sua conta de teste.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/04/15150148/design-thinking-400x280.png)  [ Design ](https://www.treinaweb.com.br/blog/categoria/design) 

     7 anos atrás

    ##  [ O que é Design Thinking? ](https://www.treinaweb.com.br/blog/o-que-e-design-thinking) 

     Confira neste artigo o que vem a ser o Design Thinking e quais são suas etapas.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **12h 51min 28s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
