See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 59053|Vastuse: 9

[.NET tuum] Praktiline võitlus: ASP.NET Core kasutab gRPC suhtlust

[Kopeeri link]
Postitatud 11.11.2019 10:55:26 | | | |
grpc(Hüperlingi sisselogimine on nähtav.) on avatud lähtekoodiga, kõrge jõudlusega ja üldotstarbeline RPC (Remote Procedure Call) raamistik, mille on välja andnud Google, mis kasutab HTTP/2 protokolli, toetab multipleximist ning kasutab ProtoBufi serialiseerimistööriistana, et pakkuda keelteüleseid ja platvormidevahelist tuge.
gRPC on kõrge jõudlusega kaugprotseduurikutse (RPC) raamistik, mis on keelesõltumatu.

GRPC peamised eelised on:

  • Kaasaegne, kõrge jõudlusega ja kerge RPC raamistik.
  • Lepingupõhine API arendus, mis vaikimisi kasutab protokollipuhvreid, võimaldades keelesõltumatuid rakendusi.
  • Tööriistad, mis on saadaval mitmes keeles, et genereerida tugevalt tüübistatud servereid ja kliente.
  • Toetab kliendi-, server- ja kahepoolseid voogedastuskõnesid.
  • Vähenda võrgu kasutust Protobufi binaarse serialiseerimisega.


See artikkel algab sõnadega . Net Core kasutab kliendi- ja serveripoolseks suhtluseks gRPC protokolli.

Loo gRPC server

Käivita Visual Studio ja vali Loo uus projekt. Või vali Visual Studio failimenüüst New > Project.

Loo uue projekti dialoogiaknas valige gRPC teenus ja seejärel valige Järgmine:




Pärast loomise lõpetamist, nagu näidatud järgmises joonises:




Loo gRPC klient

Ava teine Visual Studio instants ja vali Loo uus projekt.
Create New Project dialoogiaknas vali Console App (.NET Core) ja seejärel Next.
Nime tekstikasti sisesta gRPC-Client ja vali seejärel Loo.


Lisa vajalik pakett

gRPC kliendiprojekt nõuab järgmisi pakette:
Grpc.Net.Client, mis sisaldab .NET Core klienti.
Google.Protobuf sisaldab Protobufi sõnumeid C# jaoks.
Grpc.Tools sisaldab C# tööriista tuge Protobuf-failidele. Tööriistakomplekti ei nõuta käitusajal, seega on sõltuvused märgitud kui PrivateAssets="Kõik".




Lisa greet.proto

Loo oma gRPC kliendiprojektis Protos kaust.
Kopeeri Protos\greet.proto fail gRPC Greeter teenusest gRPC kliendiprojekti.

Muuda gRPC-Client.csproj projektifaili, lisa elementide grupp koos elemendiga, mis viitab greet.proto <Protobuf> failile:





Loo Greeter klient

Uuenda gRPC kliendi Program.cs faili järgmise koodiga:





Instantsi GrpcChannel nii, et see sisaldab infot, mida kasutatakse ühenduse loomiseks gRPC teenusega.
Ehita Greeter klient GrpcChanneli abil.
Tervitaja klient kasutab SayHello meetodit. SayHello kõne tulemus kuvatakse ekraanile.




Loo oma .proto faili suhtlus

Loo uus userinfo.proto fail servi Protos kaustas, defineeritud järgmiselt:


gRPC kasutab API arenduses lepingupõhist lähenemist. Defineeri teenused ja sõnumid failis *.proto.

Muuda GrpcService1.csproj projektifaili, lisa <Protobuf> elementide grupp koos elemendiga, mis viitab userinfo.proto failile:

<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>


Loo uus UserInfoService.cs fail Teenuste kaustas, kood on järgmine:

Registreeri UserInfoService teenus Startup.cs järgmise koodiga:

Kliendi kõrvale jättes tuleb muidugi kopeerida userinfo.proto fail ja kood on järgmine:

Tagastusväärtus:

Tere maailm!
Vastus: Tere itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Lahendamata erand. Grpc.Core.RpcException: Status(StatusCode=Tühistatud, Detail="Meetodilt sõnumit ei tagastatud.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
   aadressil 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 kontekst, BlockingUnaryCallContinuation'2 jätku)
   aadressil Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
   aadressil UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rida 62
   aadressil UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C keeles: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   aadressil gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Palun vajuta ükskõik millist klahvi, et jätkata...


Kui tagastusväärtus on null, viskab klient erandi.


Fiddler haarab koti

Fiddleriga pakettide püüdmiseks seadista esmalt kliendis proksi järgmiselt (tegelikult ei saa seda seadistada, lihtsalt ava Fiddler otse):

Viga serveri poolel:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 üle TLS-i ei olnud läbiräägitud ainult HTTP/2 lõpp-punktis.
Kliendi viga:

Lahendamata erand. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Halb gRPC vastus. Vastusprotokoll on alandatud HTTP/1.1-le.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
   aadressil 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 kontekst, BlockingUnaryCallContinuation'2 jätku)
   aadressil Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
   aadressil UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rida 62
   aadressil UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C keeles: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   aadressil gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Palun vajuta ükskõik millist klahvi, et jätkata...


POSTIAADRESS: https://localhost:5001/UserInfo/GetUserInfo

Sisu:

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


Lõpuks lisa lähtekood:

Turistid, kui soovite näha selle postituse peidetud sisu, palunVastuse


(Lõpp)




Eelmine:Programmeerija täiustus: algajast inseneriks täispikk PDF
Järgmine:100 kadudeta pottimuusikat
Postitatud 11.11.2019 17:46:30 |
ASP.NET Core kasutab gRPC suhtlust
Postitatud 28.11.2019 15:14:53 |
ASP.NET Core kasutab gRPC suhtlust
Postitatud 28.11.2019 15:15:25 |
ASP.NET Core kasutab gRPC suhtlust
Postitatud 02.12.2020 15:52:18 |
Kuidas sa selle viimase vea lahendasid?
Postitatud 07.12.2020 20:37:56 |
kasutades Grpc.Core'i;
kasutades Microsoft.Extensions.Loggingut;
kasutades süsteemi;
kasutades System.Collections.Generic;
kasutades System.Linq'i;
kasutades System.Threading.Tasks;

nimeruum GrpcService1
{
    public class UserInfoService : UserInfo.UserInfoBase
    {
        privaatne lugemiseks mõeldud<UserInfoService> ILogger _logger;
        privaatne staatiline List<UserInfoReply> userInfoReplies = uus List<UserInfoReply>();
        staatiline UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 1,
                Nimi = "Arhitekt",
                Vanus = 5,
                IsVip = tõene
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 2,
                Nimi = "itsvse.com",
                Vanus = 5,
                IsVip = vale
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 3,
                Nimi = "Väike Sodi",
                Vanus = 1,
                IsVip = vale
            });
        }
        public UserInfoService (ILoggeri<UserInfoService> logija)
        {
            _logger = logija;
        }

        avalik ülekirjutus Ülesanne<UserInfoReply> GetUserInfo (GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id);
            });
        }
    }
}
Postitatud 07.12.2020 21:06:17 |
aadressil System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   aadressil System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Ülesande ülesanne)
   aadressil System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Ülesande ülesanne)
   aadressil System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
   aadressil 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 kontekst, BlockingUnaryCallContinuation'2 jätku)
   aadressil Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 meetod, String host, CallOptions options, TRequest request)
Postitatud 25.05.2021 11:37:34 |
See on tõesti hästi kirjutatud, kiitus ja kiitus
Postitatud 05.06.2021 11:45:21 |
ASP.NET Core kasutab gRPC suhtlust
 Üürileandja| Postitatud 13.08.2025 15:25:35 |
Kasuta Postmani, et testida (siluda) gRPC teenust
https://www.itsvse.com/thread-11053-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com