grpc(Вход по гиперссылке виден.) — это открытый, высокопроизводительный, универсальный фреймворк RPC (Remote Procedure Call), выпущенный Google, использующий протокол HTTP/2, поддерживающий мультиплексирование и ProtoBuf в качестве инструмента сериализации для обеспечения кроссплатформенной и кроссплатформенной поддержки. gRPC — это высокопроизводительный фреймворк удалённых вызовов процедур (RPC), независимый от языка.
Основные преимущества gRPC включают:
- Современный, высокопроизводительный, лёгкий фреймворк RPC.
- Разработка API с приоритетом на контракт, которая по умолчанию использует буферы протоколов, что позволяет реализовать языковые независимые реализации.
- Инструменты, доступные на нескольких языках, для генерации сильно типизированных серверов и клиентов.
- Поддерживает клиентские, серверные и двусторонние потоковые звонки.
- Сократить использование сети с бинарной сериализацией Protobuf.
Эта статья начинается с . Net Core использует протокол gRPC для коммуникации на стороне клиента и сервера.
Создать сервер gRPC
Запустите Visual Studio и выберите Создать новый проект. Или выберите New > Project в меню Visual Studio File.
В диалоговом окне «Создать новый проект» выберите «gRPC Service», а затем выберите «Далее»:
После завершения создания, как показано на следующем рисунке:
Создайте клиент gRPC
Откройте второй экземпляр Visual Studio и выберите Создать новый проект. В диалоговом окне «Создать новый проект» выберите «Консольное приложение» (.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 past, и код выглядит следующим образом:
Возвратное значение:
Всем привет! Ответ: Здравствуйте, 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) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод Method'2, String host, CallOptions options, запрос 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 Пожалуйста, нажмите любую клавишу, чтобы продолжить...
Когда возвращаемое значение равно нулю, клиент выдает исключение.
Скрипач, хватай сумку
Чтобы попытаться использовать Fiddler для захвата пакетов, сначала настройте прокси на клиенте следующим образом (на самом деле, его нельзя настроить, просто откройте Fiddler напрямую):
Ошибка на стороне сервера:
fail: Microsoft.AspNetCore.Server.Kestrel[0] HTTP/2 по 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) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод Method'2, String host, CallOptions options, запрос 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 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
Наконец, приложите исходный код:
Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйста Ответ
(Конец)
|