Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 59053|Vastaus: 9

[.NET Core] Käytännön taistelu: ASP.NET Core käyttää gRPC-viestintää

[Kopioi linkki]
Julkaistu 11.11.2019 10.55.26 | | | |
grpc(Hyperlinkin kirjautuminen on näkyvissä.) on avoimen lähdekoodin, suorituskykyinen, yleiskäyttöinen RPC (Remote Procedure Call) -kehys, jonka Google on julkaissut, ja joka käyttää HTTP/2-protokollaa, tukee multiplexausta ja käyttää ProtoBufia sarjallistamistyökaluna tarjotakseen monikielisen ja monialustaisen tuen.
gRPC on korkean suorituskyvyn etäproseduurikutsu (RPC) -kehys, joka on kieliriippumaton.

gRPC:n tärkeimmät hyödyt ovat:

  • Moderni, suorituskykyinen ja kevyt RPC-kehys.
  • Sopimuslähtöinen API-kehitys, joka käyttää protokollapuskureita oletuksena, mahdollistaen kieliriippumattomat toteutukset.
  • Työkaluja saatavilla useilla kielillä vahvasti tyypitettyjen palvelimien ja asiakkaiden luomiseen.
  • Tukee asiakas-, palvelin- ja kaksisuuntaisia suoratoistopuheluita.
  • Vähennä verkon käyttöä Protobuf-binäärisarjoituksella.


Tämä artikkeli alkaa . Net Core käyttää gRPC-protokollaa asiakas- ja palvelinpuolen viestintään.

Luo gRPC-palvelin

Käynnistä Visual Studio ja valitse Luo uusi projekti. Vaihtoehtoisesti valitse Visual Studio File -valikosta New > Project.

Luo uusi projekti -valintaikkunasta valitse gRPC-palvelu ja sitten Seuraava:




Kun luominen on valmis, kuten seuraavassa kuvassa näkyy:




Luo gRPC-asiakasohjelma

Avaa toinen Visual Studio -instanssi ja valitse Luo uusi projekti.
Valitse Create New Project -valintaikkunasta Console App (.NET Core) ja valitse sitten Next.
Nimi-tekstikenttään kirjoita gRPC-asiakas ja valitse sitten Luo.


Lisää vaadittu paketti

gRPC-asiakasprojekti vaatii seuraavat paketit:
Grpc.Net.Client, joka sisältää .NET Core -asiakasohjelman.
Google.Protobuf sisältää Protobuf-viestejä C#:lle.
Grpc.Tools sisältää C#-työkalutuen Protobuf-tiedostoille. Työkalupakkia ei vaadita ajonaikaisesti, joten riippuvuudet merkitään muotoon PrivateAssets="Kaikki".




Lisää greet.proto

Luo Protos-kansio gRPC-asiakasprojektiisi.
Kopioi Protos\greet.proto-tiedosto gRPC Greeter -palvelusta gRPC-asiakasprojektiin.

Muokkaa gRPC-Client.csproj -projektitiedostoa, lisää alkioryhmä elementillä, joka viittaa greet.proto-tiedostoon <Protobuf> :





Luo Greeter-asiakas

Päivitä gRPC-asiakkaan Program.cs-tiedosto seuraavalla koodilla:





Käynnistä GrpcChannel siten, että se sisältää tiedon, jolla luodaan yhteys gRPC-palveluun.
Rakenna Greeter-asiakasohjelma GrpcChannelilla.
Tervehtijän asiakas käyttää SayHello-menetelmää. SayHello-puhelun tulos näytetään.




Luo oma .proto-tiedostosi viestintä

Luo uusi userinfo.proto-tiedosto palvelun Protos-kansion alle, määriteltynä seuraavasti:


gRPC käyttää sopimuslähtöistä lähestymistapaa API-kehityksessä. Määrittele palvelut ja viestit *.proto-tiedostossa.

Muokkaa GrpcService1.csproj -projektitiedostoa, lisää <Protobuf> alkioryhmä, jossa on elementti, joka viittaa userinfo.proto-tiedostoon:

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

  <PropertyGroup>
    <TargetFramework>NetcoreApp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf include="protos\greet.proto" GrpcServices="palvelin" />
    <Protobuf include="Protos\userinfo.proto" GrpcServices="palvelin" />
  </ItemGroup>

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

</Project>


Luo uusi UserInfoService.cs-tiedosto Services-kansion alle, koodi on seuraava:

Rekisteröi UserInfoService-palvelu Startup.cs seuraavalla koodilla:

Jättäen asiakkaan tietenkin sivuun, sinun täytyy kopioida userinfo.proto-tiedosto menneisyyteen, ja koodi on seuraava:

Palautusarvo:

Moi maailma!
Vastaus: Hei itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Käsittelemätön poikkeus. Grpc.Core.RpcException: Status(StatusCode=Peruutettu, Detail="Metodilta ei palautettu viestiä.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodi, String host, CallOptions options, TRequest request)
   osoitteessa 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 konteksti, BlockingUnaryCallContinuation'2 jatko)
   osoitteessa Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metodi, String-isäntä, CallOptions-asetukset, TRequest-pyyntö)
   osoitteessa UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) muodossa C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rivi 62
   osoitteessa UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C-muodossa: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:rivi 58
   osoitteessa gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rivi 20
Paina mitä tahansa näppäintä jatkaaksesi. . . .


Kun palautusarvo on nolla, asiakas heittää poikkeuksen.


Viulisti nappaa laukun

Jos haluat käyttää Fiddleriä pakettien kaappaamiseen, aseta ensin välityspalvelin asiakkaalle seuraavasti (itse asiassa sitä ei voi asettaa, vaan avaa Fiddler suoraan):

Virhe palvelinpuolella:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 yli TLS:ää ei neuvoteltu pelkästään HTTP/2-päätepisteessä.
Asiakasvirhe:

Käsittelemätön poikkeus. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Huono gRPC-vaste. Vastausprotokolla alennettu HTTP/1.1:een.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodi, String host, CallOptions options, TRequest request)
   osoitteessa 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 konteksti, BlockingUnaryCallContinuation'2 jatko)
   osoitteessa Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metodi, String-isäntä, CallOptions-asetukset, TRequest-pyyntö)
   osoitteessa UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) muodossa C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:rivi 62
   osoitteessa UserInfo.UserInfoClient.GetUserInfoInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) C-muodossa: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:rivi 58
   osoitteessa gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:rivi 23
Paina mitä tahansa näppäintä jatkaaksesi. . . .


POSTIOSOITE: https://localhost:5001/UserInfo/GetUserInfo

Sisältö:

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


Lopuksi liitä lähdekoodi:

Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyväVastaus


(Loppu)




Edellinen:Ohjelmoijan hiominen: aloittelijasta insinööriksi Koko PDF
Seuraava:100 häviötön pot-musiikki
Julkaistu 11.11.2019 17.46.30 |
ASP.NET Core käyttää gRPC-viestintää
Julkaistu 28.11.2019 15.14.53 |
ASP.NET Core käyttää gRPC-viestintää
Julkaistu 28.11.2019 15.15.25 |
ASP.NET Core käyttää gRPC-viestintää
Julkaistu 2.12.2020 15.52.18 |
Miten ratkaisit tämän viimeisen virheen?
Julkaistu 7.12.2020 20.37.56 |
käyttäen Grpc.Corea;
käyttäen Microsoft.Extensions.Loggingia;
käyttämällä Systemiä;
käyttäen System.Collections.Generic-tiedostoa;
käyttäen System.Linqia;
käyttäen System.Threading.Tasksia;

nimiavaruus GrpcService1
{
    julkinen luokka UserInfoService : UserInfo.UserInfoBase
    {
        yksityinen readonly-ILogger<UserInfoService> _logger;
        yksityinen staattinen lista<UserInfoReply> userInfoReplies = uusi lista<UserInfoReply>();
        staattinen UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 1,
                Nimi = "Arkkitehti",
                Ikä = 5,
                IsVip = tosi
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 2,
                Nimi = "itsvse.com",
                Ikä = 5,
                IsVip = epätosi
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 3,
                Nimi = "Pikku roskasakki",
                Ikä = 1,
                IsVip = epätosi
            });
        }
        julkinen UserInfoService (<UserInfoService>ILogger-lokija)
        {
            _logger = logger;
        }

        julkinen ohitus Tehtävä<UserInfoReply> GetUserInfo (GetUserInfoRequest request, ServerCallContext Context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id);
            });
        }
    }
}
Julkaistu 7.12.2020 21.06.17 |
osoitteessa System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   osoitteessa System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tehtävätehtävä)
   osoitteessa System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (tehtävätehtävä)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodi, String host, CallOptions options, TRequest request)
   osoitteessa 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 konteksti, BlockingUnaryCallContinuation'2 jatko)
   osoitteessa Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2-metodi, String-isäntä, CallOptions-asetukset, TRequest-pyyntö)
Julkaistu 25.5.2021 11.37.34 |
Se on todella hyvin kirjoitettu, kiitosta ja ylistystä
Julkaistu 5.6.2021 11.45.21 |
ASP.NET Core käyttää gRPC-viestintää
 Vuokraisäntä| Julkaistu 13.8.2025 15.25.35 |
Käytä Postmania testataksesi (debugata) gRPC-palvelua
https://www.itsvse.com/thread-11053-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com