Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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 и изберете 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


Накрая, прикачете изходния код:

Туристи, ако искате да видите скритото съдържание на този пост, моляОтговор


(Край)




Предишен:Усъвършенстване на програмиста: От начинаещ до инженер Пълен PDF
Следващ:100 беззагубна пот музика
Публикувано в 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 комуникация
Публикувано в 2.12.2020 г. 15:52:18 ч. |
Как реши тази последна грешка?
Публикувано в 7.12.2020 г. 20:37:56 ч. |
използвайки Grpc.Core;
използване на Microsoft.Extensions.Logging;
използвайки System;
използвайки System.Collections.Generic;
използвайки System.Linq;
използвайки System.Threading.Tasks;

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

        public override Task<UserInfoReply> GetUserInfo(GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == заявка. Id);
            });
        }
    }
}
Публикувано в 7.12.2020 г. 21:06:17 ч. |
в 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 продължение)
   в Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](метод'2 метод, String host, опции за CallOptions, заявка за TRequest)
Публикувано в 25.05.2021 г. 11:37:34 ч. |
Наистина е добре написано, с похвали и похвали
Публикувано в 5.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