grpc(De hyperlink-login is zichtbaar.) is een open-source, hoogpresterend, algemeen RPC (Remote Procedure Call) framework uitgebracht door Google, met het HTTP/2-protocol, ondersteuning voor multiplexing en gebruikmakend van ProtoBuf als serialisatietool om ondersteuning voor talenoverstijgende en platformoverstijgende ondersteuning te bieden. gRPC is een high-performance remote procedure call (RPC) framework dat taalonafhankelijk is.
De belangrijkste voordelen van gRPC zijn:
- Modern, hoogpresterend, lichtgewicht RPC-framework.
- Contract-first API-ontwikkeling die standaard protocolbuffers gebruikt, waardoor taal-agnostische implementaties mogelijk zijn.
- Hulpmiddelen beschikbaar in meerdere talen om sterk getypeerde servers en clients te genereren.
- Ondersteunt client-, server- en tweerichtingsgesprekken.
- Verminder het gebruik van het netwerk met Protobuf binaire serialisatie.
Dit artikel begint met . Net Core gebruikt het gRPC-protocol voor client- en server-side communicatie.
Maak een gRPC-server aan
Start Visual Studio en selecteer Nieuw Project aanmaken. Alternatief kun je New > Project selecteren in het Visual Studio File-menu.
Selecteer in het dialoogvenster 'Nieuw Project' maken gRPC Service en selecteer vervolgens Volgende:
Nadat de creatie is voltooid, zoals weergegeven in de volgende figuur:
Maak een gRPC-client aan
Open een tweede instantie van Visual Studio en kies Create a new project. Selecteer in het venster Nieuw Project aanmaken Console App (.NET Core) en selecteer vervolgens Volgende. Voer in het tekstvakje 'Naam' gRPC-Client in en selecteer vervolgens 'Aanmaken'.
Voeg het benodigde pakket toe
Het gRPC-clientproject vereist de volgende pakketten: Grpc.Net.Client, die de .NET Core-client bevat. Google.Protobuf bevat Protobuf-berichten voor C#. Grpc.Tools bevat ondersteuning voor C#-tools voor Protobuf-bestanden. De toolkit is niet vereist tijdens runtime, dus de afhankelijkheden worden gemarkeerd als PrivateAssets="All".
Voeg greet.proto toe
Maak een Protos-map aan in je gRPC-clientproject. Kopieer het Protos\greet.proto-bestand van de gRPC Greeter-service naar het gRPC-clientproject.
Bewerk het gRPC-Client.csproj projectbestand, voeg de itemgroep toe met het element dat verwijst naar het greet.proto-bestand <Protobuf> :
Maak een Greeter-client aan
Werk het Program.cs-bestand van de gRPC-client bij met de volgende code:
Instansier de GrpcChannel zodat deze de informatie bevat die is gebruikt om een verbinding met de gRPC-dienst te maken. Bouw een Greeter-client met GrpcChannel. De Greeter-client roept de SayHello-methode aan. Het resultaat van de SayHello-oproep wordt weergegeven.
Maak je eigen .proto-bestandscommunicatie
Maak een nieuw userinfo.proto-bestand aan onder de Protos-map van de serve, gedefinieerd als volgt:
gRPC gebruikt een contract-first benadering voor API-ontwikkeling. Definieer services en berichten in het *.proto-bestand.
Bewerk het GrpcService1.csproj-projectbestand, voeg de <Protobuf> itemgroep toe met het element dat naar het userinfo.proto-bestand verwijst:
<Project 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> <PackageReference include="Grpc.AspNetCore" versie="2.23.1" /> </ItemGroup>
</Project>
Maak een nieuw UserInfoService.cs-bestand aan onder de Diensten-map, de code is als volgt:
Registreer de UserInfoService-dienst op Startup.cs met de volgende code:
Los van de client moet je natuurlijk het userinfo.proto-bestand kopiëren, en de code is als volgt:
Rendementswaarde:
Hallo mensen! Reactie: Hallo itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Onbehandelde uitzondering. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Geen bericht teruggestuurd vanuit method.") op Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String host, CallOptions-opties, TRequest-verzoek) op Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) bij Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 voortzetting) bij Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String-host, CallOptions-opties, TRequest-verzoek) op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-opties) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:regel 62 op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:regel 58 op gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:regel 20 Druk alstublieft op een willekeurige toets om door te gaan...
Wanneer de returnwaarde nul is, gooit de client een uitzondering.
Fiddler, pak de tas
Om Fiddler te gebruiken om pakketten te vangen, stel je eerst de proxy op de client als volgt in (je kunt hem eigenlijk niet opzetten, open Fiddler gewoon direct):
Fout aan de serverzijde:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 over TLS werd niet onderhandeld op een HTTP/2-only endpoint. Klantfout:
Onbehandelde uitzondering. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slechte gRPC-respons. Responsprotocol gedowngraded naar HTTP/1.1.") op Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String host, CallOptions-opties, TRequest-verzoek) op Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) bij Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 voortzetting) bij Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-methode, String-host, CallOptions-opties, TRequest-verzoek) op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-opties) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:regel 62 op UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, metadata-headers, Nullable'1 deadline, CancellationToken cancellationToken) in C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:regel 58 op gRPC_Client.Program.Main(String[] args) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:regel 23 Druk alstublieft op een willekeurige toets om door te gaan...
POSTADRES: https://localhost:5001/UserInfo/GetUserInfo
Inhoud:
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
Voeg tenslotte de broncode bij:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
(Einde)
|