grpc(Входът към хиперлинк е видим.) е отворен, високопроизводителен, универсален RPC (Remote Procedure Call) фреймуърк, пуснат от Google, използващ протокола HTTP/2, поддържащ мултиплексиране и ProtoBuf като инструмент за сериализация за осигуряване на крос-езикова и кросплатформена поддръжка. gRPC е високопроизводителна рамка за отдалечено извикване на процедури (RPC), която е независима от езика.
Основните предимства на gRPC са:
- Модерен, високопроизводителен, лек RPC фреймворк.
- Разработка на API с приоритет на договор, която използва протоколни буфери по подразбиране, позволявайки имплементации, независими от езика.
- Инструменти са налични на няколко езика за генериране на силно типизирани сървъри и клиенти.
- Поддържа клиентски, сървърни и двупосочни стрийминг разговори.
- Намалете използването на мрежата с двоична сериализация на Protobuf.
Тази статия започва с . Net Core използва протокола gRPC за комуникация от клиентска и сървърна страна.
Създаване на gRPC сървър
Стартирайте Visual Studio и изберете Create New Project. Алтернативно, изберете New > Project от менюто Visual Studio File.
В диалоговия прозорец Create New Project изберете gRPC Service и след това изберете Следващо:
След завършване на създаването, както е показано на следващата фигура:
Създайте gRPC клиент
Отворете втора инстанция на Visual Studio и изберете Създаване на нов проект. В диалоговия прозорец Create New Project изберете Console App (.NET Core) и след това изберете Следващо. В текстовото поле за име въведете gRPC-Client и изберете Създаване.
Добавете необходимия пакет
Клиентският проект gRPC изисква следните пакети: Grpc.Net.Client, който съдържа .NET Core клиента. Google.Protobuf съдържа Protobuf съобщения за C#. Grpc.Tools включва поддръжка на C# инструменти за Protobuf файлове. Инструментариумът не е необходим по време на изпълнение, затова зависимостите се маркират като PrivateAssets="Всички".
Добавете greet.proto
Създай папка Protos в клиентския си проект за gRPC. Копирайте файла Protos\greet.proto от услугата gRPC Greeter към клиентския проект на gRPC.
Редактирайте проектния файл gRPC-Client.csproj, добавете групата елементи с елемента, който препраща към файла <Protobuf> greet.proto :
Създайте клиент за Greeter
Актуализирайте Program.cs файла на gRPC клиента със следния код:
Инстанцирайте GrpcChannel, така че да съдържа информацията, използвана за създаване на връзка с gRPC услугата. Конструирайте Greeter клиент с помощта на GrpcChannel. Клиентът Greeter използва метода SayHello. Резултатът от обаждането SayHello се показва.
Създайте собствена .proto файл комуникация
Създайте нов userinfo.proto файл под папката Protos на сървъра, дефиниран по следния начин:
gRPC използва подход, базиран на договор първо за разработка на API. Дефинирайте услуги и съобщения във файла *.proto.
Редактирайте проектния файл GrpcService1.csproj, добавете <Protobuf> групата елементи с елемента, който препраща към 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" Version="2.23.1" /> </ItemGroup>
</Project>
Създайте нов UserInfoService.cs файл под папката Services, кодът е следният:
Регистрирайте услугата UserInfoService на Startup.cs със следния код:
Оставяйки настрана клиента, разбира се, трябва да копирате файла userinfo.proto и кодът е следният:
Възвръщаема стойност:
Здравей, свят! Отговор: Здравейте, itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Необработено изключение. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Няма върнато съобщение от метода.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 метод, String host, CallOptions options, TRequest заявка) в 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 контекст, BlockingUnaryCallContinuation'2 продължение) в Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод'2 метод, String host, опции за CallOptions, заявка за TRequest) в UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) в C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:ред 62 в UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) на C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) в C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Моля, натиснете който и да е клавиш, за да продължите...
Когато стойността за връщане е null, клиентът хвърля изключение.
Фидлър, вземи чантата
За да опитате да използвате Fiddler за улавяне на пакети, първо настройте проксито на клиента по следния начин (всъщност не можете да го настроите, просто отворете Fiddler директно):
Грешка от страна на сървъра:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 over TLS не беше договорен на HTTP/2-само крайна точка. Грешка на клиента:
Необработено изключение. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Лош gRPC отговор. Протоколът за отговор е понижен до HTTP/1.1.") at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 метод, String host, CallOptions options, TRequest заявка) в 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 контекст, BlockingUnaryCallContinuation'2 продължение) в Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод'2 метод, String host, опции за CallOptions, заявка за TRequest) в UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) в C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:ред 62 в UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) на C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58 at gRPC_Client.Program.Main(String[] args) в C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:ред 23 Моля, натиснете който и да е клавиш, за да продължите...
ПОЩЕНСКИ АДРЕС: https://localhost:5001/UserInfo/GetUserInfo
Съдържание:
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
Накрая, прикачете изходния код:
Туристи, ако искате да видите скритото съдържание на този пост, моля Отговор
(Край)
|