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ím Odpověď
(Konec)
|