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 favor Resposta
(Fim)
|