Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 59053|Atbildi: 9

[.NET kodols] Praktiskā cīņa: ASP.NET Core izmanto gRPC komunikāciju

[Kopēt saiti]
Publicēts 11.11.2019 10:55:26 | | | |
grpc(Hipersaites pieteikšanās ir redzama.) ir atvērtā koda, augstas veiktspējas, universāla RPC (Remote Procedure Call) sistēma, ko izlaidis Google, izmantojot HTTP/2 protokolu, atbalstot multipleksēšanu un izmantojot ProtoBuf kā serializācijas rīku, lai nodrošinātu starpvalodu un starpplatformu atbalstu.
gRPC ir augstas veiktspējas attālās procedūras izsaukuma (RPC) sistēma, kas ir neatkarīga no valodas.

Galvenās gRPC priekšrocības ir:

  • Moderns, augstas veiktspējas, viegls RPC ietvars.
  • Līguma pirmā API izstrāde, kas pēc noklusējuma izmanto protokola buferus, ļaujot valodas agnostiskai ieviešanai.
  • Rīki, kas pieejami vairākās valodās, lai ģenerētu stipri ierakstītus serverus un klientus.
  • Atbalsta klienta, servera un divvirzienu straumēšanas zvanus.
  • Samaziniet tīkla izmantošanu ar Protobuf bināro serializāciju.


Šis raksts sākas ar . Net Core izmanto gRPC protokolu klienta puses un servera puses saziņai.

gRPC servera izveide

Palaidiet Visual Studio un atlasiet Izveidot jaunu projektu. Vai arī izvēlnē Visual Studio fails atlasiet Jauns > projekts.

Dialoglodziņā Jauna projekta izveide atlasiet gRPC pakalpojums un pēc tam atlasiet Tālāk:




Pēc izveides pabeigšanas, kā parādīts šajā attēlā:




gRPC klienta izveide

Atveriet otru Visual Studio instanci un atlasiet Izveidot jaunu projektu.
Dialoglodziņā Jauna projekta izveide atlasiet Konsoles programma (.NET Core) un pēc tam atlasiet Tālāk.
Tekstlodziņā Nosaukums ievadiet gRPC-Client un pēc tam atlasiet Izveidot.


Pievienojiet nepieciešamo paketi

gRPC klienta projektam ir nepieciešamas šādas pakotnes:
Grpc.Net.Client, kas satur .NET Core klientu.
Google.Protobuf satur Protobuf ziņojumus C#.
Grpc.Tools ietver C# rīku atbalstu Protobuf failiem. Rīkkopa nav nepieciešama izpildlaikā, tāpēc atkarības ir atzīmētas kā PrivateAssets = "Visi".




Pievienot greet.proto

Izveidojiet mapi Protos savā gRPC klienta projektā.
Kopējiet failu Protos\greet.proto no gRPC sveiciena pakalpojuma uz gRPC klienta projektu.

Rediģējiet projekta failu gRPC-Client.csproj, pievienojiet vienumu grupu ar elementu, kas atsaucas uz failu greet.proto <Protobuf> :





Sveiciena klienta izveide

Atjauniniet gRPC klienta Program.cs failu ar šādu kodu:





Izveidojiet GrpcChannel tā, lai tajā būtu informācija, kas tiek izmantota, lai izveidotu savienojumu ar gRPC pakalpojumu.
Izveidojiet Greeter klientu, izmantojot GrpcChannel.
Sveicinātāja klients izsauc SayHello metodi. Tiek parādīts SayHello zvana rezultāts.




Izveidojiet savu .proto failu komunikāciju

Izveidojiet jaunu userinfo.proto failu servisa mapē Protos, kas definēts šādi:


gRPC API izstrādei izmanto līguma pieeju. Definējiet pakalpojumus un ziņojumus failā *.proto.

Rediģējiet GrpcService1.csproj projekta failu, pievienojiet <Protobuf> vienumu grupu ar elementu, kas atsaucas uz userinfo.proto failu:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Serveris" />
    <Protobuf Include="Protos\userinfo.proto" GrpcServices="Serveris" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Grpc.AspNetCore" version="2.23.1" />
  </ItemGroup>

</Project>


Izveidojiet jaunu UserInfoService.cs failu mapē Pakalpojumi, kods ir šāds:

Reģistrējiet UserInfoService pakalpojumu Startup.cs ar šādu kodu:

Atstājot klientu, protams, jums ir jākopē userinfo.proto fails, un kods ir šāds:

Atgrieztā vērtība:

Sveika, pasaule!
Atbilde: Sveiki itsvse.com
{ "id": "1", "name": "arhitekts", "vecums": 5, "isVip": patiess }
{ "id": "2", "name": "itsvse.com", "vecums": 5 }
Neapstrādāts izņēmums. Grpc.Core.RpcException: Status(StatusCode=Atcelts, Detalizēta informācija="No metodes nav atgriezts ziņojums.")
   vietnē Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, Virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   pie Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest pieprasījums, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 turpinājums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
   pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, CallOptions opcijas) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. rinda
   pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, Metadatu galvenes, 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[] argumenti) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Lūdzu, nospiediet jebkuru taustiņu, lai turpinātu. . . .


Ja atgrieztā vērtība ir nulle, klients rada izņēmumu.


Vijolnieks satver somu

Lai mēģinātu izmantot Fiddler, lai uztvertu paketes, vispirms iestatiet starpniekserveri klientā šādi (patiesībā jūs to nevarat iestatīt, vienkārši atveriet Fiddler tieši):

Kļūda servera pusē:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2, izmantojot TLS, netika apspriests tikai HTTP/2 galapunktā.
Klienta kļūda:

Neapstrādāts izņēmums. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slikta gRPC atbilde. Atbildes protokols pazemināts uz HTTP/1.1.")
   vietnē Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, Virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   pie Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest pieprasījums, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 turpinājums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
   pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, CallOptions opcijas) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. rinda
   pie UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest pieprasījums, Metadatu galvenes, Nullable'1 deadline, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   pie gRPC_Client.Program.Main(String[] argumenti) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Lūdzu, nospiediet jebkuru taustiņu, lai turpinātu. . . .


PASTA adrese: https://localhost:5001/UserInfo/GetUserInfo

Saturs:

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


Visbeidzot, pievienojiet avota kodu:

Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzuAtbildi


(Beigas)




Iepriekšējo:Programmētāja pilnveidošana: no iesācēja līdz inženierim Pilns PDF
Nākamo:100 bezzudumu mūzika
Publicēts 11.11.2019 17:46:30 |
ASP.NET Core izmanto gRPC sakarus
Publicēts 28.11.2019 15:14:53 |
ASP.NET Core izmanto gRPC sakarus
Publicēts 28.11.2019 15:15:25 |
ASP.NET Core izmanto gRPC sakarus
Publicēts 02.12.2020 15:52:18 |
Kā jūs atrisinājāt šo pēdējo kļūdu?
Publicēts 07.12.2020 20:37:56 |
izmantojot Grpc.Core;
izmantojot Microsoft.Extensions.Logging;
izmantojot Sistēmu;
izmantojot System.Collections.Generic;
izmantojot System.Linq;
izmantojot System.Threading.Tasks;

nosaukumvieta GrpcService1
{
    publiskā klase UserInfoService : UserInfo.UserInfoBase
    {
        privāts tikai lasāms ILogger<UserInfoService> _logger;
        privāts statisks List<UserInfoReply> userInfoReplies = jauns List<UserInfoReply>();
        statisks UserInfoService()
        {
            userInfoReplies.Add(jauns UserInfoReply()
            {
                ID = 1,
                Nosaukums = "Arhitekts",
                Vecums = 5,
                IsVip = patiess
            });
            userInfoReplies.Add(jauns UserInfoReply()
            {
                ID = 2,
                Nosaukums = "itsvse.com",
                Vecums = 5,
                IsVip = nepatiess
            });
            userInfoReplies.Add(jauns UserInfoReply()
            {
                ID = 3,
                nosaukums = "Mazais putas",
                Vecums = 1,
                IsVip = nepatiess
            });
        }
        public UserInfoService(ILogger<UserInfoService> logger)
        {
            _logger = mežizstrādnieks;
        }

        publiskā ignorēšana Uzdevums<UserInfoReply> GetUserInfo(GetUserInfoRequest pieprasījums, ServerCallContext konteksts)
        {
            atgriezt Task.Run(() =>
            {
                atgriezt userInfoReplies.SingleOrDefault(x => x.Id == pieprasījumu. Id);
            });
        }
    }
}
Publicēts 07.12.2020 21:06:17 |
vietnē System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   vietnē System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Uzdevuma uzdevums)
   vietnē System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Uzdevuma uzdevums)
   vietnē System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   vietnē Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, Virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   pie Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest pieprasījums, ClientInterceptorContext'2 context, BlockingUnaryCallContinuation'2 turpinājums)
   vietnē Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metode'2 metode, virknes resursdators, CallOptions opcijas, TRequest pieprasījums)
Publicēts 25.05.2021 11:37:34 |
Tas ir patiešām labi uzrakstīts, slavas un uzslavas
Publicēts 05.06.2021 11:45:21 |
ASP.NET Core izmanto gRPC sakarus
 Saimnieks| Publicēts 13.08.2025 15:25:35 |
Izmantojiet Postman, lai pārbaudītu (atkļūdotu) gRPC pakalpojumu
https://www.itsvse.com/thread-11053-1-1.html
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com