Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 59053|Ответ: 9

[.NET Core] Практический бой: ASP.NET Core использует gRPC-коммуникацию

[Скопировать ссылку]
Опубликовано 11.11.2019 10:55:26 | | | |
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


Наконец, приложите исходный код:

Туристы, если вы хотите увидеть скрытое содержание этого поста, пожалуйстаОтвет


(Конец)




Предыдущий:Усовершенствование программиста: от новичка до инженера Полный PDF
Следующий:100 lossless pot music
Опубликовано 11.11.2019 17:46:30 |
ASP.NET Core использует gRPC-коммуникацию
Опубликовано 28.11.2019 15:14:53 |
ASP.NET Core использует gRPC-коммуникацию
Опубликовано 28.11.2019 15:15:25 |
ASP.NET Core использует gRPC-коммуникацию
Опубликовано 02.12.2020 15:52:18 |
Как вы решили эту последнюю ошибку?
Опубликовано 07.12.2020 20:37:56 |
с использованием Grpc.Core;
использование Microsoft.Extensions.Logging;
используя System;
с использованием System.Collections.Generic;
с использованием System.Linq;
с использованием System.Threading.Tasks;

пространство имён GrpcService1
{
    публичный класс UserInfoService : UserInfo.UserInfoBase
    {
        частный readonly ILogger<UserInfoService> _logger;
        private static<UserInfoReply> List userInfoReplies = новый List<UserInfoReply>();
        статический UserInfoService()
        {
            userInfoReplies.Add (новый UserInfoReply()
            {
                id = 1,
                Имя = «Архитектор»,
                Возраст = 5,
                IsVip = true
            });
            userInfoReplies.Add (новый UserInfoReply()
            {
                Id = 2,
                Имя = «itsvse.com»,
                Возраст = 5,
                IsVip = ложь
            });
            userInfoReplies.Add (новый UserInfoReply()
            {
                id = 3,
                Имя = «Маленький мерзавец»,
                Возраст = 1,
                IsVip = ложь
            });
        }
        public UserInfoService(<UserInfoService>ILogger logger)
        {
            _logger = лесоруб;
        }

        публичное переопределение задачи<UserInfoReply> GetUserInfo(GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                вернуть userInfoReplies.SingleOrDefault(x => x.Id == запрос. Там же);
            });
        }
    }
}
Опубликовано 07.12.2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   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)
Опубликовано 25.05.2021 11:37:34 |
Она действительно хорошо написана, и похвала, и похвала
Опубликовано 05.06.2021 11:45:21 |
ASP.NET Core использует gRPC-коммуникацию
 Хозяин| Опубликовано 13.08.2025 15:25:35 |
Используйте Postman для тестирования (отладки) сервиса gRPC
https://www.itsvse.com/thread-11053-1-1.html
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com