grpc(Prihlásenie na hypertextový odkaz je viditeľné.) je open-source, vysoko výkonný, univerzálny RPC (Remote Procedure Call) framework vydaný spoločnosťou Google, využívajúci protokol HTTP/2, podporujúci multiplexovanie a využívajúci ProtoBuf ako nástroj na serializáciu na podporu naprieč jazykmi a platformami. gRPC je vysokovýkonný rámec pre vzdialené volanie procedúr (RPC), ktorý je nezávislý od jazyka.
Hlavné výhody gRPC sú:
- Moderný, vysoko výkonný, ľahký RPC rámec.
- Vývoj API založený na zmluve, ktorý štandardne používa protokolové buffery, čo umožňuje jazykovo nezávislé implementácie.
- Nástroje dostupné vo viacerých jazykoch na generovanie silne typovaných serverov a klientov.
- Podporuje klientske, serverové a obojsmerné streamovacie hovory.
- Obmedziť používanie siete pomocou binárnej serializácie Protobuf.
Tento článok začína slovami . Net Core používa protokol gRPC na komunikáciu na strane klienta a servera.
Vytvoriť gRPC server
Spustite Visual Studio a vyberte Vytvoriť nový projekt. Prípadne vyberte New > Project z menu Visual Studio File.
V dialógovom okne Vytvoriť nový projekt vyberte službu gRPC a potom ďalej:
Po dokončení vytvorenia, ako je znázornené na nasledujúcom obrázku:
Vytvoriť gRPC klienta
Otvorte druhú inštanciu Visual Studia a vyberte Vytvoriť nový projekt. V dialógovom okne Vytvoriť nový projekt vyberte Console App (.NET Core) a potom vyberte Ďalej. V textovom poli Názov zadajte gRPC-Client a potom vyberte Vytvoriť.
Pridajte požadovaný balík
GRPC klientský projekt vyžaduje nasledujúce balíky: Grpc.Net.Client, ktorý obsahuje .NET Core klienta. Google.Protobuf obsahuje správy Protobuf pre C#. Grpc.Tools obsahuje podporu nástrojov v C# pre súbory Protobuf. Toolkit nie je potrebný za behu, takže závislosti sú označené ako PrivateAssets="All".
Add greet.proto
Vytvor si priečinok Protos vo svojom gRPC klientskom projekte. Skopírujte súbor Protos\greet.proto zo služby gRPC Greeter do projektu klienta gRPC.
Upravte projektový súbor gRPC-Client.csproj, pridajte skupinu položiek s prvkom, ktorý odkazuje na súbor greet.proto <Protobuf> :
Vytvorte klienta Greeter
Aktualizujte Program.cs súbor gRPC klienta nasledujúcim kódom:
Inštancujte GrpcChannel tak, aby obsahoval informácie použité na vytvorenie spojenia so službou gRPC. Vytvorte klienta Greeter pomocou GrpcChannel. Klient Uvítačky volá metódu SayHello. Zobrazí sa výsledok hovoru SayHello.
Vytvorte si vlastnú .proto komunikáciu so súbormi .proto
Vytvorte nový súbor userinfo.proto v priečinku Protos servisu, definovaný nasledovne:
gRPC používa prístup založený na zmluve pri vývoji API. Definujte služby a správy v súbore *.proto.
Upravte súbor projektu GrpcService1.csproj, pridajte <Protobuf> skupinu položiek s prvkom, ktorý odkazuje na súbor userinfo.proto:
<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" verzia="2.23.1" /> </ItemGroup>
</Project>
Vytvorte nový UserInfoService.cs súbor v priečinku Služby, kód je nasledovný:
Zaregistrujte službu UserInfoService na Startup.cs s nasledujúcim kódom:
Ak necháme klienta bokom, samozrejme, musíte skopírovať súbor userinfo.proto a kód je nasledovný:
Výnosná hodnota:
Čaute všetci! Odpoveď: Ahoj itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "vek": 5 } Neriešená výnimka. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Žiadna správa vrátená z metódy.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metóda, String host, CallOptions options, TRequest request) na Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontext, pokračovanie BlockingUnaryCallContinuation'2) na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:Linka 62 na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Prosím, stlačte akúkoľvek klávesu pre pokračovanie...
Keď je návratová hodnota nulová, klient vyhodí výnimku.
Fiddler, chyť tašku
Ak chcete použiť Fiddler na zachytávanie paketov, najprv nastavte proxy na klientovi nasledovne (v skutočnosti ho nemôžete nastaviť, stačí otvoriť Fiddler priamo):
Chyba na strane servera:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 cez TLS nebolo dohodnuté na koncovom bode iba HTTP/2. Chyba klienta:
Neriešená výnimka. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Zlá gRPC odpoveď. Odpovedný protokol znížený na HTTP/1.1.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metóda, String host, CallOptions options, TRequest request) na Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontext, pokračovanie BlockingUnaryCallContinuation'2) na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request) at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:Linka 62 na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23 Prosím, stlačte akúkoľvek klávesu pre pokračovanie...
POŠTOVÁ adresa: https://localhost:5001/UserInfo/GetUserInfo
Obsah:
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
Nakoniec pripojte zdrojový kód:
Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím. Odpoveď
(Koniec)
|