Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 59053|Odgovoriti: 9

[.NET Core] Praktični boj: ASP.NET Core uporablja gRPC komunikacijo

[Kopiraj povezavo]
Objavljeno na 11. 11. 2019 10:55:26 | | | |
grpc(Prijava do hiperpovezave je vidna.) je odprtokoden, visokozmogljiv, splošni RPC (Remote Procedure Call) okvir, ki ga je izdal Google, uporablja protokol HTTP/2, podpira multipleksiranje in uporablja ProtoBuf kot orodje za serializacijo za podporo med jeziki in platformami.
gRPC je visokozmogljiv okvir za oddaljene klice postopkov (RPC), ki je jezikovno neodvisen.

Glavne prednosti gRPC so:

  • Sodoben, visoko zmogljiv in lahek RPC okvir.
  • Razvoj API-jev, ki temeljijo na pogodbi, ki privzeto uporablja protokolne medpomnilnike, kar omogoča jezikovno neodvisne implementacije.
  • Orodja, ki so na voljo v več jezikih za generiranje močno tipiziranih strežnikov in odjemalcev.
  • Podpira klice odjemalca, strežnika in dvosmernega pretakanja.
  • Zmanjšajte uporabo omrežja s Protobuf binarno serializacijo.


Ta članek se začne z . Net Core uporablja protokol gRPC za komunikacijo na strani odjemalca in strežnika.

Ustvarite gRPC strežnik

Zaženi Visual Studio in izberi Ustvari nov projekt. Alternativno izberi New > Project iz menija Visual Studio File.

V pogovornem oknu za ustvarjanje novega projekta izberite storitev gRPC in nato izberite Naprej:




Po zaključku ustvarjanja, kot je prikazano na naslednji sliki:




Ustvarite gRPC odjemalca

Odpri drugo instanco Visual Studia in izberi Ustvari nov projekt.
V pogovornem oknu Ustvari nov projekt izberite Konzolna aplikacija (.NET Core) in nato izberite Naprej.
V besedilnem polju Ime vnesite gRPC-Client in nato izberite Ustvari.


Dodajte zahtevani paket

GRPC odjemalski projekt zahteva naslednje pakete:
Grpc.Net.Client, ki vsebuje .NET Core odjemalca.
Google.Protobuf vsebuje Protobuf sporočila za C#.
Grpc.Tools vključuje podporo za C# orodja za datoteke Protobuf. Orodjarna ni potrebna med izvajanjem, zato so odvisnosti označene kot PrivateAssets="All".




Dodaj greet.proto

Ustvarite mapo Protos v svojem gRPC odjemalskem projektu.
Kopirajte datoteko Protos\greet.proto iz storitve gRPC Greeter v projekt gRPC odjemalca.

Uredite projektno datoteko gRPC-Client.csproj, dodajte skupino elementov z elementom, ki se sklicuje na datoteko greet.proto <Protobuf> :





Ustvarite odjemalca Greeter

Posodobite Program.cs datoteko gRPC odjemalca z naslednjo kodo:





Instancirajte GrpcChannel tako, da vsebuje informacije, uporabljene za vzpostavitev povezave s storitvijo gRPC.
Sestavite Greeter odjemalca z uporabo GrpcChannel.
Odjemalec Greeter imenuje metodo SayHello. Prikaže se rezultat klica SayHello.




Ustvarite svojo lastno .proto datoteko za komunikacijo

Ustvarite novo datoteko userinfo.proto v mapi Protos servisa, definirano takole:


gRPC uporablja pristop, ki temelji na pogodbi pri razvoju API-jev. Določite storitve in sporočila v datoteki *.proto.

Uredite projektno datoteko GrpcService1.csproj, dodajte <Protobuf> skupino elementov z elementom, ki se sklicuje na datoteko userinfo.proto:

<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" različica="2.23.1" />
  </ItemGroup>

</Project>


Ustvarite novo UserInfoService.cs datoteko v mapi Storitve, koda je naslednja:

Registrirajte storitev UserInfoService na Startup.cs z naslednjo kodo:

Če odmislimo odjemalca, morate seveda kopirati datoteko userinfo.proto, koda pa je naslednja:

Donosna vrednost:

Pozdravljeni vsi skupaj!
Odgovor: Pozdravljeni, itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": res }
{ "id": "2", "name": "itsvse.com", "starost": 5 }
Neobdelana izjema. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Ni sporočila vrnjeno iz metode.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   na 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, nadaljevanje BlockingUnaryCallContinuation'2)
   na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linija 62
   na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 20
Prosimo, pritisnite katerokoli tipko za nadaljevanje...


Ko je vrnjena vrednost ničelna, odjemalec vrže izjemo.


Fiddler, zgrabi torbo

Če želite poskusiti uporabiti Fiddler za zajem paketov, najprej nastavite proxy na odjemalcu takole (pravzaprav ga ne morete nastaviti, samo odprite Fiddler neposredno):

Napaka na strežniški strani:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 preko TLS ni bil dogovorjen na končni točki, ki je bila samo HTTP/2.
Napaka odjemalca:

Neobdelana izjema. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Slab gRPC odziv. Protokol odziva znižan na HTTP/1.1.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   na 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, nadaljevanje BlockingUnaryCallContinuation'2)
   na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:linija 62
   na UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) v C: \Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\UserinfoGrpc.cs:line 58
   at gRPC_Client.Program.Main(String[] args) v C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Prosimo, pritisnite katerokoli tipko za nadaljevanje...


POŠTNI naslov: https://localhost:5001/UserInfo/GetUserInfo

Vsebina:

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


Na koncu priložite izvorno kodo:

Turisti, če želite videti skrito vsebino te objave, prosimOdgovoriti


(Konec)




Prejšnji:Izpopolnjevanje programerja: Od začetnika do inženirja Celoten PDF
Naslednji:100 brezizgubna glasba za marihuano
Objavljeno na 11. 11. 2019 17:46:30 |
ASP.NET Core uporablja gRPC komunikacijo
Objavljeno na 28. 11. 2019 15:14:53 |
ASP.NET Core uporablja gRPC komunikacijo
Objavljeno na 28. 11. 2019 15:15:25 |
ASP.NET Core uporablja gRPC komunikacijo
Objavljeno na 2. 12. 2020 15:52:18 |
Kako ste rešili to zadnjo napako?
Objavljeno na 7. 12. 2020 20:37:56 |
z uporabo Grpc.Core;
z uporabo Microsoft.Extensions.Logging;
z uporabo System;
z uporabo System.Collections.Generic;
z uporabo System.Linq;
uporaba System.Threading.Tasks;

imenski prostor GrpcService1
{
    javni razred UserInfoService : UserInfo.UserInfoBase
    {
        zasebni readonly ILogger<UserInfoService> _logger;
        zasebni statični seznam<UserInfoReply> userInfoReplies = novi List<UserInfoReply>();
        statični UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 1,
                Ime = "Arhitekt",
                Starost = 5,
                IsVip = resnično
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 2,
                Ime = "itsvse.com",
                Starost = 5,
                IsVip = napačno
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 3,
                Ime = "Mali smet",
                Starost = 1,
                IsVip = napačno
            });
        }
        public UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = logger;
        }

        javni preglas<UserInfoReply> Naloga GetUserInfo(GetUserInfoRequest request, kontekst ServerCallContext)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id);
            });
        }
    }
}
Objavljeno na 7. 12. 2020 21:06:17 |
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter'1.GetResult()
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   na 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, nadaljevanje BlockingUnaryCallContinuation'2)
   na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
Objavljeno na 25. 05. 2021 11:37:34 |
Res je dobro napisano, hvala in pohvala
Objavljeno na 5. 06. 2021 11:45:21 |
ASP.NET Core uporablja gRPC komunikacijo
 Najemodajalec| Objavljeno na 13. 08. 2025 15:25:35 |
Uporabite Postman za testiranje (odpravljanje napak) storitve gRPC
https://www.itsvse.com/thread-11053-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com