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