Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 59053|Odpoveď: 9

[.NET Core] Praktický boj: ASP.NET Core používa gRPC komunikáciu

[Kopírovať odkaz]
Zverejnené 11. 11. 2019 10:55:26 | | | |
grpc(Prihlásenie na hypertextový odkaz je viditeľné.) je open-source, vysoko výkonný, univerzálny RPC (Remote Procedure Call) framework vydaný spoločnosťou Google, využívajúci protokol HTTP/2, podporujúci multiplexovanie a využívajúci ProtoBuf ako nástroj na serializáciu na podporu naprieč jazykmi a platformami.
gRPC je vysokovýkonný rámec pre vzdialené volanie procedúr (RPC), ktorý je nezávislý od jazyka.

Hlavné výhody gRPC sú:

  • Moderný, vysoko výkonný, ľahký RPC rámec.
  • Vývoj API založený na zmluve, ktorý štandardne používa protokolové buffery, čo umožňuje jazykovo nezávislé implementácie.
  • Nástroje dostupné vo viacerých jazykoch na generovanie silne typovaných serverov a klientov.
  • Podporuje klientske, serverové a obojsmerné streamovacie hovory.
  • Obmedziť používanie siete pomocou binárnej serializácie Protobuf.


Tento článok začína slovami . Net Core používa protokol gRPC na komunikáciu na strane klienta a servera.

Vytvoriť gRPC server

Spustite Visual Studio a vyberte Vytvoriť nový projekt. Prípadne vyberte New > Project z menu Visual Studio File.

V dialógovom okne Vytvoriť nový projekt vyberte službu gRPC a potom ďalej:




Po dokončení vytvorenia, ako je znázornené na nasledujúcom obrázku:




Vytvoriť gRPC klienta

Otvorte druhú inštanciu Visual Studia a vyberte Vytvoriť nový projekt.
V dialógovom okne Vytvoriť nový projekt vyberte Console App (.NET Core) a potom vyberte Ďalej.
V textovom poli Názov zadajte gRPC-Client a potom vyberte Vytvoriť.


Pridajte požadovaný balík

GRPC klientský projekt vyžaduje nasledujúce balíky:
Grpc.Net.Client, ktorý obsahuje .NET Core klienta.
Google.Protobuf obsahuje správy Protobuf pre C#.
Grpc.Tools obsahuje podporu nástrojov v C# pre súbory Protobuf. Toolkit nie je potrebný za behu, takže závislosti sú označené ako PrivateAssets="All".




Add greet.proto

Vytvor si priečinok Protos vo svojom gRPC klientskom projekte.
Skopírujte súbor Protos\greet.proto zo služby gRPC Greeter do projektu klienta gRPC.

Upravte projektový súbor gRPC-Client.csproj, pridajte skupinu položiek s prvkom, ktorý odkazuje na súbor greet.proto <Protobuf> :





Vytvorte klienta Greeter

Aktualizujte Program.cs súbor gRPC klienta nasledujúcim kódom:





Inštancujte GrpcChannel tak, aby obsahoval informácie použité na vytvorenie spojenia so službou gRPC.
Vytvorte klienta Greeter pomocou GrpcChannel.
Klient Uvítačky volá metódu SayHello. Zobrazí sa výsledok hovoru SayHello.




Vytvorte si vlastnú .proto komunikáciu so súbormi .proto

Vytvorte nový súbor userinfo.proto v priečinku Protos servisu, definovaný nasledovne:


gRPC používa prístup založený na zmluve pri vývoji API. Definujte služby a správy v súbore *.proto.

Upravte súbor projektu GrpcService1.csproj, pridajte <Protobuf> skupinu položiek s prvkom, ktorý odkazuje na súbor 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" verzia="2.23.1" />
  </ItemGroup>

</Project>


Vytvorte nový UserInfoService.cs súbor v priečinku Služby, kód je nasledovný:

Zaregistrujte službu UserInfoService na Startup.cs s nasledujúcim kódom:

Ak necháme klienta bokom, samozrejme, musíte skopírovať súbor userinfo.proto a kód je nasledovný:

Výnosná hodnota:

Čaute všetci!
Odpoveď: Ahoj itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "vek": 5 }
Neriešená výnimka. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Žiadna správa vrátená z metódy.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metóda, 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 kontext, pokračovanie 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:Linka 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
Prosím, stlačte akúkoľvek klávesu pre pokračovanie...


Keď je návratová hodnota nulová, klient vyhodí výnimku.


Fiddler, chyť tašku

Ak chcete použiť Fiddler na zachytávanie paketov, najprv nastavte proxy na klientovi nasledovne (v skutočnosti ho nemôžete nastaviť, stačí otvoriť Fiddler priamo):

Chyba na strane servera:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 cez TLS nebolo dohodnuté na koncovom bode iba HTTP/2.
Chyba klienta:

Neriešená výnimka. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Zlá gRPC odpoveď. Odpovedný protokol znížený na HTTP/1.1.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 metóda, 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 kontext, pokračovanie 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:Linka 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
Prosím, stlačte akúkoľvek klávesu pre pokračovanie...


POŠTOVÁ adresa: https://localhost:5001/UserInfo/GetUserInfo

Obsah:

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


Nakoniec pripojte zdrojový kód:

Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím.Odpoveď


(Koniec)




Predchádzajúci:Programátorské zdokonalenie: Od začiatočníka k inžinierovi Kompletný PDF
Budúci:100 bezstratová hudba
Zverejnené 11. 11. 2019 17:46:30 |
ASP.NET Core používa komunikáciu gRPC
Zverejnené 28. 11. 2019 15:14:53 |
ASP.NET Core používa komunikáciu gRPC
Zverejnené 28. 11. 2019 15:15:25 |
ASP.NET Core používa komunikáciu gRPC
Zverejnené 2. 12. 2020 15:52:18 |
Ako ste vyriešili túto poslednú chybu?
Zverejnené 7. 12. 2020 20:37:56 |
pomocou Grpc.Core;
pomocou Microsoft.Extensions.Logging;
pomocou systému;
používajúc System.Collections.Generic;
pomocou System.Linq;
pomocou System.Threading.Tasks;

menný priestor GrpcService1
{
    verejná trieda UserInfoService : UserInfo.UserInfoBase
    {
        súkromný readlen ILogger<UserInfoService> _logger;
        súkromný statický List<UserInfoReply> userInfoReplies = nový List<UserInfoReply>();
        statický UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 1,
                Meno = "architekt",
                Vek = 5,
                IsVip = pravda
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 2,
                Meno = "itsvse.com",
                Vek = 5,
                IsVip = nepravda
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 3,
                Meno = "Malá spodina",
                Vek = 1,
                IsVip = nepravda
            });
        }
        public UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = logger;
        }

        verejné prepísanie úlohy<UserInfoReply> GetUserInfo(požiadavka GetUserInfoRequest, kontext ServerCallContext)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id.);
            });
        }
    }
}
Zverejnené 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 metóda, 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 kontext, pokračovanie BlockingUnaryCallContinuation'2)
   na Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
Zverejnené 25. 5. 2021 11:37:34 |
Je to naozaj dobre napísané, chvála a chvála
Zverejnené 5. 6. 2021 11:45:21 |
ASP.NET Core používa komunikáciu gRPC
 Prenajímateľ| Zverejnené 13. 8. 2025 15:25:35 |
Použite Postman na testovanie (ladenie) služby gRPC
https://www.itsvse.com/thread-11053-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com