Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 59053|Válasz: 9

[.NET mag] Gyakorlati harc: ASP.NET Core gRPC kommunikációt használ

[Linket másol]
Közzétéve 2019. 11. 11. 10:55:26 | | | |
Grpc(A hiperlink bejelentkezés látható.) egy nyílt forráskódú, nagy teljesítményű, általános célú RPC (Remote Procedure Call) keretrendszer, amelyet a Google adott ki, amely az HTTP/2 protokollt használja, támogatja a multiplexelést, és a ProtoBuf-ot serializációs eszközként használja a nyelvek közötti és platformos támogatás biztosítására.
a gRPC egy nagy teljesítményű távoli eljáráshívás (RPC) keretrendszer, amely nyelvtől független.

A gRPC fő előnyei a következők:

  • Modern, nagy teljesítményű, könnyű RPC keretrendszer.
  • Szerződéses API-fejlesztés, amely alapértelmezett protokollpuffereket használ, lehetővé téve nyelvfüggetlen megvalósításokat.
  • Több nyelven elérhető eszközök erősen típusozott szerverek és kliens generálásához.
  • Támogatja kliens, szerver és kétirányú streaming hívásokat.
  • Csökkentse a hálózat használatát Protobuf bináris serializációval.


Ez a cikk a . A Net Core a gRPC protokollt használja kliens és szerveroldali kommunikációhoz.

Hozz létre egy gRPC szervert

Indítsd el a Visual Studio-t, és válaszd ki az Új Projekt létrehozását. Alternatívaként válaszd a Visual Studio File menüből a New > Project opciót.

Az Új Projekt létrehozása párbeszédablakban válaszd ki a gRPC szolgáltatást, majd válaszd a Következőt:




A létrehozás befejezése után, ahogy az alábbi ábrán látható:




Hozz létre gRPC klienst

Nyiss meg egy második Visual Studio példányt, és válaszd az Új projekt létrehozását.
Az Új Projekt létrehozása párbeszédablakban válaszd ki a Konzol alkalmazást (.NET Core), majd válaszd a Következőt.
A Név szövegmezőbe írd be a gRPC-Client menüpontot, majd válaszd a Létrehozás gombot.


Add hozzá a szükséges csomagot

A gRPC kliens projekthez a következő csomagokat kell megírni:
Grpc.Net.Client, amely tartalmazza a .NET Core klienst.
A Google.Protobuf Protobuf üzeneteket tartalmaz C#-hoz.
A Grpc.Tools támogatja a C# eszközt Protobuf fájlokhoz. Az eszköztár futásidőben nem szükséges, ezért a függőségek PrivateAssets="All" jelzéssel vannak jelölve.




Add hozzá greet.proto

Hozz létre egy Protos mappát a gRPC kliens projektedben.
Másold le a Protos\greet.proto fájlt a gRPC Greeter szolgáltatásról a gRPC kliens projektre.

Szerkesztés a gRPC-Client.csproj projektfájlt, hozzáadja az elemcsoportot azzal az elemmel, amely a greet.proto <Protobuf> fájlra hivatkozik:





Létrehozz egy Greeter klienst

Frissítse a gRPC kliens Program.cs fájlját a következő kóddal:





Indítsd be a GrpcChannel-t úgy, hogy tartalmazza azokat az információkat, amelyekkel kapcsolatot teremthetsz a gRPC szolgáltatással.
Építs egy Greeter klienst GrpcChannel segítségével.
A Greeter ügyfél a SayHello módszert hívja. A SayHello hívás eredménye jelenik meg.




Hozz létre saját .proto fájlkommunikációt

Hozzon létre egy új userinfo.proto fájlt a szerv Protos mappájában, amely az alábbiak szerint definiálható:


a gRPC szerződéses megközelítést alkalmaz az API fejlesztéshez. Definiáld szolgáltatásokat és üzeneteket a *.proto fájlban.

Szerkesztés a GrpcService1.csproj projektfájlt, hozzáadja az <Protobuf> elemcsoportot azzal az elemmel, amely a userinfo.proto fájlra hivatkozik:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>NetcoreApp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf include="Protos\greet.proto" GrpcServices="szerver" />
    <Protobuf include="Protos\userinfo.proto" GrpcServices="szerver" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference include="Grpc.AspNetCore" verzió="2.23.1" />
  </ItemGroup>

</Project>


Hozz létre egy új UserInfoService.cs fájlt a Szolgáltatások mappában, a kód a következő:

Regisztrálja a UserInfoService szolgáltatást Startup.cs-n a következő kóddal:

Természetesen a klienst félretéve a userinfo.proto fájlt kell átmásolnod, és a kód a következő:

Visszaküldési érték:

Helló világ!
Válasz: Sziasztok itsvse.com
{ "id": "1", "name": "architect", "age": 5, "isVip": true }
{ "id": "2", "name": "itsvse.com", "age": 5 }
Kezeletlen kivétel. Grpc.Core.RpcException: Status(StatusCode=Cancelled, Detail="Nem tért vissza üzenet a metódótól.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   a Grpc.Core.Interceptors.InterceptingCallInvoker oldalon. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontextus, BlockingUnaryCallContinuation'2 folytatás)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. sor
   a UserInfo.UserInfoClient.GetUserInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) címen C betűn: \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 20
Kérlek, nyomjon bármelyik billentyűt a folytatáshoz...


Ha a visszatérési érték null, az ügyfél kivételt dob.


Hegedűs, fogja meg a táskát

Ha megpróbálod a Fiddlerrel csomagokat rögzíteni, először állítsd be a proxyt a kliensen az alábbiak szerint (valójában nem lehet beállítani, csak nyisd meg közvetlenül a Fiddlert):

Hiba a szerver oldalon:

fail: Microsoft.AspNetCore.Server.Kestrel[0]
      A HTTP/2 a TLS-en keresztül nem volt egyeztetve egy kizárólag HTTP/2-s végponton.
Ügyfélhiba:

Kezeletlen kivétel. Grpc.Core.RpcException: Status(StatusCode=Internal, Detail="Rossz gRPC válasz. A válaszprotokoll HTTP/1.1-re minősítve vissza.")
   at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   a Grpc.Core.Interceptors.InterceptingCallInvoker oldalon. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontextus, BlockingUnaryCallContinuation'2 folytatás)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
   at UserInfo.UserInfoClient.GetUserInfo(GetUserInfoRequest request, CallOptions options) in C:\Users\DELL\source\repos\GrpcService1\gRPC-Client\obj\Debug\netcoreapp3.0\ UserinfoGrpc.cs:62. sor
   a UserInfo.UserInfoClient.GetUserInfo (GetUserInfoRequest request, Metadata headers, Nullable'1 deadline, CancellationToken cancellationToken) címen C betűn: \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
Kérlek, nyomjon bármelyik billentyűt a folytatáshoz...


POSTACÍM: https://localhost:5001/UserInfo/GetUserInfo

Tartalom:

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


Végül csatoljuk a forráskódot:

Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlekVálasz


(Vége)




Előző:Programozó finomítása: kezdőtől mérnökig Teljes PDF
Következő:100 veszteségmentes pot zene
Közzétéve 2019. 11. 11. 17:46:30 |
ASP.NET Core gRPC kommunikációt használ
Közzétéve 2019. 11. 28. 15:14:53 |
ASP.NET Core gRPC kommunikációt használ
Közzétéve 2019. 11. 28. 15:15:25 |
ASP.NET Core gRPC kommunikációt használ
Közzétéve 2020. 12. 02. 15:52:18 |
Hogyan oldottad meg ezt az utolsó hibát?
Közzétéve 2020. 12. 07. 20:37:56 |
Grpc.Core használatával;
Microsoft.Extensions.Logging használatával;
System használatával;
System.Collections.Generic használatával;
a System.Linq használatával;
System.Threading.Tasks használatával;

névtér GrpcService1
{
    public class UserInfoService : UserInfo.UserInfoBase
    {
        privát readonly-<UserInfoService>_logger;
        private statikus<UserInfoReply> lista userInfoReplies = új List<UserInfoReply>();
        statikus UserInfoService()
        {
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 1,
                Név = "Építész",
                Életkor = 5,
                IsVip = igaz
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 2,
                Név = "itsvse.com",
                Életkor = 5,
                IsVip = hamis
            });
            userInfoReplies.Add(new UserInfoReply()
            {
                Id = 3,
                Név = "Kis szemét",
                Életkor = 1,
                IsVip = hamis
            });
        }
        public UserInfoService (ILogger<UserInfoService> logger)
        {
            _logger = favágó;
        }

        public felülírás<UserInfoReply> Feladat GetUserInfo(GetUserInfoRequest request, ServerCallContext context)
        {
            return Task.Run(() =>
            {
                return userInfoReplies.SingleOrDefault(x => x.Id == request. Id);
            });
        }
    }
}
Közzétéve 2020. 12. 07. 21:06:17 |
a System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() címen
   a System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Feladat feladat) címen
   a System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Feladatfeladat) címen
   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)
   a Grpc.Core.Interceptors.InterceptingCallInvoker oldalon. <BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext'2 ctx)
   at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext'2 kontextus, BlockingUnaryCallContinuation'2 folytatás)
   at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method'2 method, String host, CallOptions options, TRequest request)
Közzétéve 2021. 05. 25. 11:37:34 |
Nagyon jól van megírva, dicséret és dicséret
Közzétéve 2021. 06. 05. 11:45:21 |
ASP.NET Core gRPC kommunikációt használ
 Háziúr| Közzétéve 2025. 08. 13. 15:25:35 |
Használd a Postmant a gRPC szolgáltatás tesztelésére (hibakeresésére)
https://www.itsvse.com/thread-11053-1-1.html
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com