Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 59053|Resposta: 9

[.NET Core] Combate prático: ASP.NET Core usa comunicação gRPC

[Copiar link]
Publicado em 11/11/2019 10:55:26 | | | |
grpc(O login do hiperlink está visível.) é um framework RPC (Remote Procedure Call) de código aberto, de alto desempenho e uso geral, lançado pelo Google, utilizando o protocolo HTTP/2, suportando multiplexação e utilizando o ProtoBuf como ferramenta de serialização para fornecer suporte multi-idiomas e multiplataforma.
gRPC é um framework de chamadas remotas de procedimentos (RPC) de alto desempenho que é independente da linguagem.

Os principais benefícios do gRPC são:

  • Framework moderno, de alto desempenho e leve para RPC.
  • Desenvolvimento de API com base em contrato que utiliza buffers de protocolo por padrão, permitindo implementações independentes da linguagem.
  • Ferramentas disponíveis em múltiplos idiomas para gerar servidores e clientes fortemente tipados.
  • Suporta chamadas de cliente, servidor e streaming bidirecional.
  • Reduzir o uso da rede com serialização binária Protobuf.


Este artigo começa com . O Net Core utiliza o protocolo gRPC para comunicação do lado do cliente e do servidor.

Crie um servidor gRPC

Inicie o Visual Studio e selecione Criar Novo Projeto. Alternativamente, selecione Projeto de Novo > no menu de Arquivos do Visual Studio.

Na caixa de diálogo Criar Novo Projeto, selecione Serviço gRPC e então selecione Próximo:




Após a conclusão da criação, como mostrado na figura a seguir:




Criar um cliente gRPC

Abra uma segunda instância do Visual Studio e selecione Criar um novo projeto.
Na caixa de diálogo Criar Novo Projeto, selecione Console App (.NET Core) e então selecione Próximo.
Na caixa de texto Nome, digite gRPC-Client e então selecione Criar.


Adicione o pacote necessário

O projeto cliente gRPC requer os seguintes pacotes:
Grpc.Net.Client, que contém o cliente .NET Core.
O Google.Protobuf contém mensagens Protobuf para C#.
Grpc.Tools inclui suporte a ferramentas C# para arquivos Protobuf. O toolkit não é necessário em tempo de execução, então as dependências são marcadas como PrivateAssets="All".




Adicionar greet.proto

Crie uma pasta Protos no seu projeto cliente gRPC.
Copie o arquivo Protos\greet.proto do serviço gRPC Greeter para o projeto cliente gRPC.

Edite o arquivo do projeto gRPC-Client.csproj, adicione o grupo de itens com o elemento que faz referência ao arquivo <Protobuf> greet.proto :





Crie um cliente Greeter

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





Instância o GrpcChannel para que ele contenha as informações usadas para criar uma conexão com o serviço gRPC.
Construa um cliente Greeter usando o GrpcChannel.
O cliente Greeter chama o método SayHello. O resultado da chamada SayHello é exibido.




Crie sua própria comunicação de arquivo .proto

Crie um novo arquivo userinfo.proto na pasta Protos do serviço, definido da seguinte forma:


O gRPC utiliza uma abordagem contratual para desenvolvimento de APIs. Defina serviços e mensagens no arquivo *.proto.

Edite o arquivo do projeto GrpcService1.csproj, adicione o <Protobuf> grupo de itens com o elemento que faz referência ao arquivo userinfo.proto:

<Projeto Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>NetcoreApp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
    <Protobuf Include="Protos\userinfo.proto" grpcServices="Server" />
  </ItemGroup>

  <ItemGroup>
    <PackageReferenceInclude="Grpc.AspNetCore" Versão="2.23.1" />
  </ItemGroup>

</Project>


Crie um novo arquivo UserInfoService.cs na pasta Services, o código é o seguinte:

Registre o serviço UserInfoService em Startup.cs com o seguinte código:

Deixando de lado o cliente, é claro, você precisa copiar o arquivo userinfo.proto para além dele, e o código é o seguinte:

Valor de retorno:

Olá, mundo!
Resposta: Olá itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "nome": "itsvse.com", "idade": 5 }
Exceção não resolvida. Grpc.Core.RpcException: Status(StatusCode=Cancelado, Detalhe="Nenhuma mensagem retornada do método.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, host de string, opções de CallOptions, solicitação TRequest)
   em Grpc.Core.Interceptores.InterceptandoChamadaInvocador. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   em Grpc.Core.ClienteBase.ClienteBaseConfiguração.ClienteBaseConfiguraçãoInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest solicitação, ClienteInterceptorContexto'2 contexto, continuação BlockingUnaryCallContinuation'2)
   em Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método '2 método, host de string, opções de chamadas, solicitação TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(solicitação GetUserInfoRequest, opções CallOptions) em C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linha 62
   em UserInfo.UserInfoClient.GetUserInfo(solicitação GetUserInfoRequest, cabeçalhos de metadados, prazo Nullable'1, CancellationToken cancellationToken) em C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   em gRPC_Client.Program.Main(String[] args) em C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Por favor, pressione qualquer tecla para continuar...


Quando o valor de retorno é nulo, o cliente lança uma exceção.


Fiddler, pegue a bolsa

Para tentar usar o Fiddler para capturar pacotes, primeiro configure o proxy no cliente da seguinte forma (na verdade, você não pode configurá-lo, basta abrir o Fiddler diretamente):

Erro no lado do servidor:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 sobre TLS não foi negociado em um endpoint apenas HTTP/2.
Erro do cliente:

Exceção não resolvida. Grpc.Core.RpcException: Status(StatusCode=Interno, Detalhe="Resposta gRPC ruim. Protocolo de resposta rebaixado para HTTP/1.1.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, host de string, opções de CallOptions, solicitação TRequest)
   em Grpc.Core.Interceptores.InterceptandoChamadaInvocador. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   em Grpc.Core.ClienteBase.ClienteBaseConfiguração.ClienteBaseConfiguraçãoInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest solicitação, ClienteInterceptorContexto'2 contexto, continuação BlockingUnaryCallContinuation'2)
   em Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método '2 método, host de string, opções de chamadas, solicitação TRequest)
   at UserInfo.UserInfoClient.GetUserInfo(solicitação GetUserInfoRequest, opções CallOptions) em C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linha 62
   em UserInfo.UserInfoClient.GetUserInfo(solicitação GetUserInfoRequest, cabeçalhos de metadados, prazo Nullable'1, CancellationToken cancellationToken) em C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   at gRPC_Client.Program.Main(String[] args) em C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Por favor, pressione qualquer tecla para continuar...


Endereço postal: https://localhost:5001/UserInfo/GetUserInfo

Conteúdo:

Host: localhost:5001
User-Agent: grpc-dotnet/2.25.0.0
TE: trailers
grpc-accept-encoding: identity,gzip
Content-Type: application/grpc
Content-Length: 7
Fiddler-Encoding: base64


Por fim, anexe o código-fonte:

Turistas, se quiserem ver o conteúdo oculto deste post, por favorResposta


(Fim)




Anterior:Refinamento do Programador: De Iniciante a Engenheiro PDF Completo
Próximo:100 música de pote sem perdas
Publicado em 11/11/2019 17:46:30 |
ASP.NET Core utiliza comunicação gRPC
Publicado em 28/11/2019 15:14:53 |
ASP.NET Core utiliza comunicação gRPC
Publicado em 28/11/2019 15:15:25 |
ASP.NET Core utiliza comunicação gRPC
Publicado em 02/12/2020 15:52:18 |
Como você resolveu esse último erro?
Publicado em 07/12/2020 20:37:56 |
usando Grpc.Core;
usando Microsoft.Extensions.Logging;
usando o Sistema;
usando System.Collections.Generic;
usando System.Linq;
usando System.Threading.Tasks;

namespace GrpcService1
{
    classe pública UserInfoService : UserInfo.UserInfoBase
    {
        ILogger _logger privado, somente leitura;<UserInfoService>
        private static<UserInfoReply> List userInfoRespondies = new List<UserInfoReply>();
        UserInfoService estático ()
        {
            userInfoReplies.Add(novo UserInfoReply()
            {
                Id = 1,
                Nome = "Arquiteto",
                Idade = 5,
                IsVip = true
            });
            userInfoReplies.Add(novo UserInfoReply()
            {
                Id = 2,
                Nome = "itsvse.com",
                Idade = 5,
                IsVip = falso
            });
            userInfoReplies.Add(novo UserInfoReply()
            {
                Id = 3,
                Nome = "Pequeno",
                Idade = 1,
                IsVip = falso
            });
        }
        Public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = madeireiro;
        }

        Substituição pública<UserInfoReply> Tarefa GetUserInfo (Solicitação GetUserInfoRequest, contexto ServerCallContext)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == solicitação. Id);
            });
        }
    }
}
Publicado em 07/12/2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](método Method'2, host de string, opções de CallOptions, solicitação TRequest)
   em Grpc.Core.Interceptores.InterceptandoChamadaInvocador. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest requis, ClientInterceptorContext'2 ctx)
   em Grpc.Core.ClienteBase.ClienteBaseConfiguração.ClienteBaseConfiguraçãoInterceptor.BlockingUnaryCall[TRequest,TRresponderse](TRequest solicitação, ClienteInterceptorContexto'2 contexto, continuação BlockingUnaryCallContinuation'2)
   em Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Método '2 método, host de string, opções de chamadas, solicitação TRequest)
Publicado em 25/05/2021 11:37:34 |
É muito bem escrito, elogios e elogios
Publicado em 05/06/2021 11:45:21 |
ASP.NET Core utiliza comunicação gRPC
 Senhorio| Publicado em 13/08/2025 15:25:35 |
Use o Postman para testar (depurar) o serviço gRPC
https://www.itsvse.com/thread-11053-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com