grpc(Вхід за гіперпосиланням видно.) — це відкритий, високопродуктивний, універсальний фреймворк RPC (Remote Procedure Call), випущений Google, що використовує протокол HTTP/2, підтримує мультиплексування та використовує ProtoBuf як інструмент серіалізації для забезпечення крос-мовної та кросплатформної підтримки. gRPC — це високопродуктивний фреймворк віддаленого виклику процедур (RPC), який не залежить від мови.
Основні переваги gRPC такі:
- Сучасний, високопродуктивний, легкий фреймворк RPC.
- Розробка API, орієнтована на контракт, яка за замовчуванням використовує буфери протоколів, що дозволяє реалізувати, незалежні від мови.
- Інструменти, доступні кількома мовами для генерації сильно типізованих серверів і клієнтів.
- Підтримує клієнтські, серверні та двосторонні потокові дзвінки.
- Зменшити використання мережі за допомогою бінарної серіалізації Протобуфа.
Ця стаття починається з . Net Core використовує протокол gRPC для зв'язку на стороні клієнта та сервера.
Створити gRPC-сервер
Запустіть Visual Studio і виберіть Створити новий проєкт. Або ж виберіть New > Project у меню Visual Studio File.
У діалоговому вікні «Створити новий проєкт» виберіть gRPC Service, а потім «Далі»:
Після завершення створення, як показано на наступному рисунку:
Створіть клієнт gRPC
Відкрийте другий екземпляр Visual Studio і виберіть Створити новий проєкт. У діалоговому вікні «Створити новий проєкт» виберіть «Консольний додаток» (.NET Core), а потім «Далі». У тексті Ім'я введіть gRPC-Client, а потім виберіть Create.
Додайте необхідний пакет
Клієнтський проєкт gRPC потребує наступних пакетів: Grpc.Net.Client, який містить клієнт .NET Core. Google.Protobuf містить повідомлення Protobuf для C#. Grpc.Tools включає підтримку інструментів C# для файлів Protobuf. Інструментарій не потрібен під час виконання, тому залежності позначені як PrivateAssets="All".
Додайте 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" версія="2.23.1" /> </ItemGroup>
</Project>
Створіть новий UserInfoService.cs-файл у папці Services, код виглядає так:
Зареєструйте сервіс UserInfoService на Startup.cs з таким кодом:
Відкинувши клієнта, звісно, потрібно скопіювати файл userinfo.proto past, і код виглядає так:
Повернене значення:
Привіт, народ! Відповідь: Привіт, itsvse.com { "id": "1", "name": "architect", "age": 5, "isVip": true } { "id": "2", "name": "itsvse.com", "age": 5 } Невирішений виняток. Grpc.Core.RpcException: Status(StatusCode=Скасовано, Detail="Повідомлення не повернуто від методу.") на Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод'2 метод, String host, CallOptions options, TRequest request) на 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](метод Method'2, String host, CallOptions options, TRequest request) на 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 за адресою gRPC_Client.Program.Main(String[] args) у C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20 Будь ласка, натисніть будь-яку клавішу, щоб продовжити...
Коли повернене значення дорівнює нулю, клієнт кидає виняток.
Скрипаль, бери сумку
Щоб спробувати використовувати Fiddler для захоплення пакетів, спочатку налаштуйте проксі на клієнті наступним чином (насправді його не можна налаштувати, просто відкрийте Fiddler безпосередньо):
Помилка на стороні сервера:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 через TLS не був узгоджений на HTTP/2-кінцевій точці. Помилка клієнта:
Невирішений виняток. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Погана відповідь gRPC. Протокол відповіді понижено до HTTP/1.1.") на Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод'2 метод, String host, CallOptions options, TRequest request) на 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](метод Method'2, String host, CallOptions options, TRequest request) на 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 за адресою gRPC_Client.Program.Main(String[] args) у C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 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
Нарешті, додайте вихідний код:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
(Кінець)
|