grpc(Inloggningen med hyperlänken är synlig.) är ett öppen källkods-, högpresterande, allmänt RPC (Remote Procedure Call)-ramverk släppt av Google, med HTTP/2-protokollet, stöd för multiplexering och ProtoBuf som ett serialiseringsverktyg för att erbjuda stöd för både språk och plattform. gRPC är ett högpresterande ramverk för fjärrproceduranrop (RPC) som är språkoberogt.
De främsta fördelarna med gRPC är:
- Modernt, högpresterande, lättviktigt RPC-ramverk.
- Kontraktsförst-API-utveckling som använder protokollbuffertar som standard, vilket möjliggör språkoberoende implementationer.
- Verktyg tillgängliga i flera språk för att generera starkt typade servrar och klienter.
- Stöder klient-, server- och tvåvägs-streamingsamtal.
- Minska användningen av nätverket med Protobuf binär serialisering.
Den här artikeln börjar med . Net Core använder gRPC-protokollet för klient- och server-sida.
Skapa en gRPC-server
Starta Visual Studio och välj Create New Project. Alternativt kan du välja New > Project från Visual Studio File-menyn.
I dialogrutan Skapa nytt projekt, välj gRPC Service och välj sedan Nästa:
Efter att skapandet är slutfört, som visas i följande figur:
Skapa en gRPC-klient
Öppna en andra instans av Visual Studio och välj Skapa ett nytt projekt. I dialogrutan Skapa nytt projekt, välj Console App (.NET Core) och välj sedan Nästa. I textrutan Namn, skriv in gRPC-Client och välj sedan Skapa.
Lägg till det nödvändiga paketet
gRPC-klientprojektet kräver följande paket: Grpc.Net.Client, som innehåller .NET Core-klienten. Google.Protobuf innehåller Protobuf-meddelanden för C#. Grpc.Tools inkluderar C#-verktyg för Protobuf-filer. Verktygslådan krävs inte vid körning, så beroendena markeras som PrivateAssets="Alla".
Lägg till greet.proto
Skapa en Protos-mapp i ditt gRPC-klientprojekt. Kopiera filen Protos\greet.proto från gRPC Greeter-tjänsten till gRPC-klientprojektet.
Redigera projektfilen gRPC-Client.csproj, lägg till itemgruppen med elementet som refererar till greet.proto-filen <Protobuf> :
Skapa en Greeter-klient
Uppdatera gRPC-klientens Program.cs-fil med följande kod:
Instansiera GrpcChannel så att den innehåller informationen som används för att skapa en anslutning till gRPC-tjänsten. Bygg en Greeter-klient med GrpcChannel. Greeter-klienten kallar SayHello-metoden. Resultatet av SayHello-samtalet visas.
Skapa din egen .proto-filkommunikation
Skapa en ny userinfo.proto-fil under Protos-mappen i servern, definierad enligt följande:
gRPC använder en kontraktsförst-metod för API-utveckling. Definiera tjänster och meddelanden i *.proto-filen.
Redigera GrpcService1.csproj-projektfilen, lägg till <Protobuf> itemgruppen med elementet som refererar till userinfo.proto-filen:
<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" version="2.23.1" /> </ItemGroup>
</Project>
Skapa en ny UserInfoService.cs-fil under mappen Tjänster, koden är följande:
Registrera UserInfoService-tjänsten på Startup.cs med följande kod:
Bortsett från klienten måste du förstås kopiera userinfo.proto-filen vidare, och koden är följande:
Avkastningsvärde:
Hej världen! Svar: Hej itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Undantag för ohanterad användning. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Inget meddelande returneras från metod.") på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metoden, String host, CallOptions-alternativ, TRequest-förfrågan) på Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) på Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest-begäran, ClientInterceptorContext'2 kontext, BlockingUnaryCallContinuation'2 fortsättning) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metod, String host, CallOptions-alternativ, TRequest-förfrågan) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativ) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rad 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-begäran, metadataheaders, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rad 20 Tryck på vilken knapp som helst för att fortsätta...
När returvärdet är null kastar klienten ett undantag.
Fiddler, ta väskan
För att försöka använda Fiddler för att fånga paket, ställ först upp proxyn på klienten enligt följande (faktum är att du inte kan ställa in den, bara öppna Fiddler direkt):
Fel på serversidan:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 över TLS förhandlades inte fram på en HTTP/2-endast slutpunkt. Kundfel:
Undantag för ohanterad användning. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Dåligt gRPC-svar. Responsprotokoll nedgraderat till HTTP/1.1.") på Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metoden, String host, CallOptions-alternativ, TRequest-förfrågan) på Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) på Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest-begäran, ClientInterceptorContext'2 kontext, BlockingUnaryCallContinuation'2 fortsättning) på Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metod, String host, CallOptions-alternativ, TRequest-förfrågan) på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest, CallOptions-alternativ) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rad 62 på UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest-begäran, metadataheaders, Nullable'1 deadline, CancellationToken cancellationToken) i C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 på gRPC_Client.Program.Main(String[] args) i C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rad 23 Tryck på vilken knapp som helst för att fortsätta...
POSTADRESS: https://localhost:5001/UserInfo/GetUserInfo
Innehåll:
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
Slutligen, bifoga källkoden:
Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
(Slut)
|