Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 59053|Odpověď: 9

[.NET Core] Praktický boj: ASP.NET Core používá komunikaci gRPC

[Kopírovat odkaz]
Zveřejněno 11.11.2019 10:55:26 | | | |
grpc(Přihlášení k hypertextovému odkazu je viditelné.) je open-source, vysoce výkonný, univerzální RPC (Remote Procedure Call) framework vydaný společností Google, využívající protokol HTTP/2, podporující multiplexování a využívající ProtoBuf jako nástroj pro serializaci pro podporu napříč jazyky i platformami.
gRPC je vysoce výkonný rámec pro vzdálené volání procedur (RPC), který je jazykově nezávislý.

Hlavní výhody gRPC jsou:

  • Moderní, vysoce výkonný, lehký RPC framework.
  • Vývoj API na základě kontraktu, který ve výchozím nastavení používá protokolové buffery, což umožňuje implementace nezávislé na jazyce.
  • Nástroje dostupné ve více jazycích pro generování silně typovaných serverů a klientů.
  • Podporuje klientské, serverové a obousměrné streamovací hovory.
  • Omezit používání sítě pomocí binární serializace Protobuf.


Tento článek začíná slovy . Net Core používá protokol gRPC pro komunikaci na straně klienta a serveru.

Vytvořte gRPC server

Spusť Visual Studio a vyber Vytvořit nový projekt. Alternativně vyberte New > Project v menu Visual Studio File.

V dialogovém okně Vytvořit nový projekt vyberte službu gRPC a poté zvolte Další:




Po dokončení vytvoření, jak je znázorněno na následujícím obrázku:




Vytvořte gRPC klienta

Otevřete druhou instanci Visual Studia a vyberte Vytvořit nový projekt.
V dialogovém okně Vytvořit nový projekt vyberte Konzolovou aplikaci (.NET Core) a poté zvolte Další.
V textovém poli Název zadejte gRPC-Client a poté vyberte Vytvořit.


Přidejte požadovaný balíček

Projekt klienta gRPC vyžaduje následující balíčky:
Grpc.Net.Client, který obsahuje klienta .NET Core.
Google.Protobuf obsahuje zprávy Protobuf pro C#.
Grpc.Tools zahrnuje podporu nástrojů v C# pro soubory Protobuf. Toolkit není v běhu potřeba, takže závislosti jsou označeny jako PrivateAssets="All".




Add greet.proto

Vytvořte složku Protos ve svém projektu gRPC klienta.
Zkopírovat soubor Protos\greet.proto ze služby gRPC Greeter do klientského projektu gRPC.

Upravte soubor projektu gRPC-Client.csproj, přidejte skupinu položek s prvkem, který odkazuje na soubor greet.proto <Protobuf> :





Vytvořte klienta pro uvítání

Aktualizujte Program.cs soubor klienta gRPC následujícím kódem:





Instancujte GrpcChannel tak, aby obsahoval informace použité k vytvoření spojení se službou gRPC.
Vytvořte klienta Greeter pomocí GrpcChannel.
Klient Uvítače nazývá metodu SayHello. Výsledek hovoru SayHello se zobrazí.




Vytvořte si vlastní .proto komunikaci se souborem .proto

Vytvořte nový soubor userinfo.proto ve složce Protos serveru, definovaný následovně:


gRPC používá přístup založený na smlouvě při vývoji API. Definujte služby a zprávy v souboru *.proto.

Upravte projektový soubor GrpcService1.csproj, přidejte <Protobuf> skupinu položek s prvkem, který odkazuje na soubor 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" verze="2.23.1" />
  </ItemGroup>

</Project>


Vytvořte nový UserInfoService.cs soubor ve složce Služby, kód je následující:

Zaregistrujte službu UserInfoService na Startup.cs s následujícím kódem:

Samozřejmě kromě klienta je potřeba zkopírovat soubor userinfo.proto a kód je následující:

Návratnost:

Ahoj světe!
Odpověď: Dobrý den, itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Neřešená výjimka. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Žádná zpráva vrácena z metody.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, 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čování BlockingUnaryCallContinuation'2)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, 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:Řádek 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
Pro pokračování stiskněte prosím jakoukoli klávesu...


Když je návratová hodnota null, klient vyhodí výjimku.


Fiddler, vezmi tašku

Chcete-li se pokusit použít Fiddler k zachycení paketů, nejprve nastavte proxy na klientovi takto (ve skutečnosti to nelze nastavit, stačí Fiddler přímo otevřít):

Chyba na straně serveru:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      HTTP/2 přes TLS nebyl vyjednán na koncovém bodu pouze HTTP/2.
Chyba klienta:

Neřešená výjimka. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Špatná gRPC odpověď. Protokol reakce byl snížen na HTTP/1.1.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, 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čování BlockingUnaryCallContinuation'2)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, 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:Řádek 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) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\Program.cs:line 23
Pro pokračování stiskněte prosím jakoukoli klávesu...


POŠTOVNÍ 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


Nakonec přiložte zdrojový kód:

Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosímOdpověď


(Konec)




Předchozí:Programátorské vylepšení: Od začátečníka k inženýrovi Kompletní PDF
Další:100 bezztrátová hudba
Zveřejněno 11.11.2019 17:46:30 |
ASP.NET Core využívá komunikaci gRPC
Zveřejněno 28.11.2019 15:14:53 |
ASP.NET Core využívá komunikaci gRPC
Zveřejněno 28.11.2019 15:15:25 |
ASP.NET Core využívá komunikaci gRPC
Zveřejněno 02.12.2020 15:52:18 |
Jak jste vyřešili tuto poslední chybu?
Zveřejněno 07.12.2020 20:37:56 |
pomocí Grpc.Core;
pomocí Microsoft.Extensions.Logging;
pomocí System;
pomocí System.Collections.Generic;
pomocí System.Linq;
pomocí System.Threading.Tasks;

jmenný prostor GrpcService1
{
    veřejná třída UserInfoService : UserInfo.UserInfoBase
    {
        soukromý ILogger<UserInfoService> _logger;
        soukromý statický seznam<UserInfoReply> userInfoReplies = nový List<UserInfoReply>();
        statický UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 1,
                Jméno = "Architekt",
                Věk = 5,
                IsVip = pravda
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 2,
                Jméno = "itsvse.com",
                Věk = 5,
                IsVip = nepravda
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                id = 3,
                Jméno = "Malý šmejd",
                Věk = 1,
                IsVip = nepravda
            });
        }
        public UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = logger;
        }

        veřejné přepsání<UserInfoReply> Task GetUserInfo(GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id.);
            });
        }
    }
}
Zveřejněno 07.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](metoda Method'2, 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čování BlockingUnaryCallContinuation'2)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](metoda Method'2, String host, CallOptions options, TRequest request)
Zveřejněno 25.05.2021 11:37:34 |
Je to opravdu dobře napsané, chvála a chvála
Zveřejněno 05.06.2021 11:45:21 |
ASP.NET Core využívá komunikaci gRPC
 Pronajímatel| Zveřejněno 13.08.2025 15:25:35 |
Použijte Postman k testování (debugování) služby gRPC
https://www.itsvse.com/thread-11053-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com