Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 59053|Atsakyti: 9

[.NET branduolys] Praktinė kova: ASP.NET Core naudoja gRPC ryšį

[Kopijuoti nuorodą]
Paskelbta 2019-11-11 10:55:26 | | | |
grpc(Hipersaito prisijungimas matomas.) yra atvirojo kodo, didelio našumo, bendrosios paskirties RPC (Remote Procedure Call) sistema, kurią išleido Google, naudojanti HTTP/2 protokolą, palaikanti multipleksavimą ir naudojanti ProtoBuf kaip serializavimo įrankį, kad būtų galima teikti kelių kalbų ir kelių platformų palaikymą.
gRPC yra didelio našumo nuotolinio procedūrų iškvietimo (RPC) sistema, kuri yra nepriklausoma nuo kalbos.

Pagrindiniai gRPC privalumai:

  • Moderni, didelio našumo, lengva RPC sistema.
  • Sutartyje pirmasis API kūrimas, kuris pagal numatytuosius nustatymus naudoja protokolo buferius, leidžiančius diegti nepriklausomai nuo kalbos.
  • Įrankiai keliomis kalbomis, skirti generuoti stipriai įvestus serverius ir klientus.
  • Palaiko kliento, serverio ir dvipusius srautinius skambučius.
  • Sumažinkite tinklo naudojimą naudodami "Protobuf" dvejetainį serializavimą.


Šis straipsnis prasideda . "Net Core" naudoja gRPC protokolą kliento ir serverio ryšiui.

Sukurkite gRPC serverį

Paleiskite "Visual Studio" ir pasirinkite Kurti naują projektą. Arba meniu "Visual Studio" failas pasirinkite Naujas > projektas.

Dialogo lange Kurti naują projektą pasirinkite gRPC paslauga, tada pasirinkite Pirmyn:




Baigus kūrimą, kaip parodyta šiame paveikslėlyje:




Sukurkite gRPC klientą

Atidarykite antrą "Visual Studio" egzempliorių ir pasirinkite Kurti naują projektą.
Dialogo lange Kurti naują projektą pasirinkite Konsolės programa (.NET Core), tada pasirinkite Pirmyn.
Teksto lauke Pavadinimas įveskite gRPC-Client, tada pasirinkite Kurti.


Pridėkite reikiamą paketą

gRPC kliento projektui reikalingi šie paketai:
Grpc.Net.Client, kuriame yra .NET Core klientas.
Google.Protobuf yra Protobuf pranešimai, skirti C#.
Grpc.Tools apima C# įrankių palaikymą Protobuf failams. Įrankių rinkinys nereikalingas vykdymo metu, todėl priklausomybės pažymėtos kaip PrivateAssets="All".




Pridėti greet.proto

Sukurkite "Protos" aplanką savo gRPC kliento projekte.
Nukopijuokite Protos\greet.proto failą iš gRPC Greeter tarnybos į gRPC kliento projektą.

Redaguokite projekto failą gRPC-Client.csproj, pridėkite elementų grupę su elementu, nurodančiu failą greet.proto <Protobuf> :





Sukurkite "Greeter" klientą

Atnaujinkite gRPC kliento Program.cs failą naudodami šį kodą:





Sukurkite GrpcChannel taip, kad jame būtų informacija, naudojama ryšiui su gRPC tarnyba sukurti.
Sukurkite "Greeter" klientą naudodami "GrpcChannel".
"Greeter" klientas skambina "SayHello" metodu. Rodomas "SayHello" skambučio rezultatas.




Sukurkite savo .proto failų ryšį

Sukurkite naują userinfo.proto failą aptarnavimo aplanke Protos, apibrėžtą taip:


gRPC API kūrimui naudoja sutarties metodą. Apibrėžkite paslaugas ir pranešimus *.proto faile.

Redaguokite GrpcService1.csproj projekto failą, pridėkite <Protobuf> elementų grupę su elementu, nurodančiu failą userinfo.proto:

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


Sukurkite naują UserInfoService.cs failą aplanke Paslaugos, kodas yra toks:

Užregistruokite "UserInfoService" paslaugą Startup.cs naudodami šį kodą:

Atmetus klientą, žinoma, turite nukopijuoti userinfo.proto failą praeityje, o kodas yra toks:

Grąžinama reikšmė:

Sveikas, pasauli!
Atsakymas: Sveiki itsvse.com
{ "id": "1", "name": "architektas", "amžius": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Neapdorota išimtis. Grpc.Core.RpcException: Status(StatusCode=Atšaukta, Detail="Iš metodo negrąžintas joks pranešimas.")
   Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodas'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
   adresu Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest užklausa, ClientInterceptorContext'2 kontekstas, BlockingUnaryCallContinuation'2 tęsinys)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
   UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, CallOptions parinktys) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62 eilutė
   UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, Metaduomenų antraštės, Nullable'1 terminas, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Norėdami tęsti, paspauskite bet kurį klavišą. . . .


Kai grąžinama reikšmė yra neapibrėžta, klientas pateikia išimtį.


Smuikininkas griebk krepšį

Norėdami pabandyti naudoti "Fiddler" paketams užfiksuoti, pirmiausia nustatykite tarpinį serverį kliente taip:

Klaida serverio pusėje:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 per TLS nebuvo deramasi tik HTTP/2 galiniame taške.
Kliento klaida:

Neapdorota išimtis. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Netinkamas gRPC atsakymas. Atsakymo protokolas sumažintas į HTTP/1.1.")
   Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodas'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
   adresu Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest užklausa, ClientInterceptorContext'2 kontekstas, BlockingUnaryCallContinuation'2 tęsinys)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
   UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, CallOptions parinktys) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62 eilutė
   UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest užklausa, Metaduomenų antraštės, Nullable'1 terminas, CancellationToken cancellationToken) C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   gRPC_Client.Program.Main(String[] args) C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Norėdami tęsti, paspauskite bet kurį klavišą. . . .


PAŠTO adresas: https://localhost:5001/UserInfo/GetUserInfo

Turinys:

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


Galiausiai pridėkite šaltinio kodą:

Turistai, jei norite pamatyti paslėptą šio įrašo turinį, prašomeAtsakyti


(Pabaiga)




Ankstesnis:Programuotojo patobulinimas: nuo pradedančiojo iki inžinieriaus Visas PDF
Kitą:100 puodų muzikos be nuostolių
Paskelbta 2019-11-11 17:46:30 |
"ASP.NET Core" naudoja gRPC ryšį
Paskelbta 2019-11-28 15:14:53 |
"ASP.NET Core" naudoja gRPC ryšį
Paskelbta 2019-11-28 15:15:25 |
"ASP.NET Core" naudoja gRPC ryšį
Paskelbta 2020-12-02 15:52:18 |
Kaip išsprendėte šią paskutinę klaidą?
Paskelbta 2020-12-07 20:37:56 |
naudojant Grpc.Core;
naudojant Microsoft.Extensions.Logging;
naudojantis Sistema;
naudojant System.Collections.Generic;
naudojant System.Linq;
naudojant System.Threading.Tasks;

vardų sritis GrpcService1
{
    viešoji klasė UserInfoService : UserInfo.UserInfoBase
    {
        privatus tik skaitomas ILogger<UserInfoService> _logger;
        privatus statinis sąrašas<UserInfoReply> userInfoReplies = naujas Sąrašas<UserInfoReply>();
        statinis UserInfoService()
        {
            userInfoReplies.Add(naujas UserInfoReply()
            {
                ID = 1,
                Name = "Architektas",
                Amžius = 5,
                IsVip = teisinga
            });
            userInfoReplies.Add(naujas UserInfoReply()
            {
                ID = 2,
                Name = "itsvse.com",
                Amžius = 5,
                IsVip = klaidinga
            });
            userInfoReplies.Add(naujas UserInfoReply()
            {
                ID = 3,
                Name = "Mažas šlamštas",
                Amžius = 1,
                IsVip = klaidinga
            });
        }
        public UserInfoService(ILogger<UserInfoService> logger)
        {
            _logger = registratorius;
        }

        viešasis nepaisymas Užduotis<UserInfoReply> GetUserInfo(GetUserInfoRequest užklausa, ServerCallContext kontekstas)
        {
            return Task.Run(() =>
            {
                grąžinti userInfoReplies.SingleOrDefault(x => x.Id == užklausą. Id);
            });
        }
    }
}
Paskelbta 2020-12-07 21:06:17 |
adresu System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Užduoties užduotis)
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Užduoties užduotis)
   System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Metodas'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
   adresu Grpc.Core.Interceptors.InterceptingCallInvoker. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest užklausa, ClientInterceptorContext'2 kontekstas, BlockingUnaryCallContinuation'2 tęsinys)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metodas, eilutės pagrindinis kompiuteris, CallOptions parinktys, TRequest užklausa)
Paskelbta 2021-05-25 11:37:34 |
Tai tikrai gerai parašyta, pagyrimas ir pagyrimas
Paskelbta 2021-06-05 11:45:21 |
"ASP.NET Core" naudoja gRPC ryšį
 Savininkas| Paskelbta 2025-08-13 15:25:35 |
Naudokite "Postman" gRPC paslaugai išbandyti (derinti)
https://www.itsvse.com/thread-11053-1-1.html
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com