рдирдпрд╛ рдкреНрд░рдпреЛрдЧ: gRPC- рд╡реЗрдм рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ .NET gRPC рд╕реЗрд╡рд╛рдПрдБ рдХреЙрд▓ рдХрд░рдирд╛

рд╣рдо .NET рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрди рд╣реИрдВред gRPC- рд╡реЗрдм рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдкрд╛ рдпрд╛ рдмреНрд▓реЗрдЬрд╝рд░ WebAssembly рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ gRPC рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

.NET рдХреЗ рд▓рд┐рдП gRPC- рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╣рд╛рди gRPC рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд▓рд╛рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ:

  • рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдХреЛрдб-рдЙрддреНрдкрдиреНрди рдЧреНрд░рд╛рд╣рдХ
  • рдХреЙрдореНрдкреИрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдкреЛрд╕реНрдЯ
  • рд╕рд░реНрд╡рд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ



рдХреНрдпрд╛ рд╣реИ рдЬреАрдЖрд░рдкреАрд╕реА-рд╡реЗрдм


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ gRPC HTTP / 2 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддреГрдд рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рд▓рд╛ рдХреЛрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ API рдирд╣реАрдВ рд╣реИред gRPC- рд╡реЗрдм  HTTP / 1.1 рдФрд░ HTTP / 2 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

gRPC- рд╡реЗрдм рдХреЛрдИ рдирдИ рддрдХрдиреАрдХ рдирд╣реАрдВ рд╣реИред рдПрдХ рд╕реНрдерд┐рд░  рдЬреАрдЖрд░рдкреАрд╕реА-рд╡реЗрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ , рд╕рд╛рде рд╣реА  рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдЖрд░рдкреАрд╕реА рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА-рд╡реЗрдм рдХреЗ рдмреАрдЪ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ  рдкреНрд░реЙрдХреНрд╕реА рд╣реИ ред рдирдП рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкреИрдХреЗрдЬ ASP.NET Core gRPC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ gRPC- рд╡реЗрдм рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдФрд░ .NET Core gRPC рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ gRPC- рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред (Blazor WebAssembly рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛!)

рдЬреАрдЖрд░рдкреАрд╕реА-рд╡реЗрдм рдХреЗ рд╕рд╛рде рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


  • рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ ASP.NET рдХреЛрд░ рдЬреАрдЖрд░рдкреАрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ - рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреАрдЖрдИ рдЬреАрдЖрд░рдкреАрд╕реА HTTP / 2 рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред gRPC- рд╡реЗрдм рдПрдХ рд╕рдВрдЧрдд рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
    • рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдкрд╛
    • .NET рдмреНрд▓реЗрдЬрд╝рд░ рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди
  • IIS рдФрд░ Azure рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрд╡рд╛ рдореЗрдВ ASP.NET рдХреЛрд░ gRPC рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╣реЛрд╕реНрдЯ рдХрд░реЗрдВред рдХреБрдЫ рд╕рд░реНрд╡рд░, рдЬреИрд╕реЗ IIS рдФрд░ Azure рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрд╡рд╛, рд╡рд░реНрддрдорд╛рди рдореЗрдВ gRPC рд╕реЗрд╡рд╛рдУрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИрдВред рдЬрдмрдХрд┐ рд╡реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, gRPC- рд╡реЗрдм рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдЬ рдХрд┐рд╕реА рднреА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • .NET рдХреЛрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рд╕реЗ gRPC рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдХреБрдЫ .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо HttpClientHTTP / 2 рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред gRPC- рд╡реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ gRPC рд╕реЗрд╡рд╛рдУрдВ (рдЬреИрд╕реЗ Blazor WebAssembly, Xamarin) рдкрд░ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ gRPC- рд╡реЗрдм рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдо рд╣реИ рдФрд░ рджреЛ gRPC рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рджреЛ-рддрд░рдлрд╝рд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧред (рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ!)

GRPC- рд╡реЗрдм рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджреЗрд╢


рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ .NET рдореЗрдВ gRPC рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ  рд╕рд░рд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЖрд░рдВрдн рдХрд░ рд╕рдХреЗрдВ ред

gRPC- рд╡реЗрдм рдХреЛ рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред ASP.NET рдХреЛрд░ gRPC рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХреЛ Grpc.AspNetCore.Web рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред GRPC- рд╡реЗрдм, рдЬреЛрдбрд╝рдиреЗ AddGrpcWeb(...)рдФрд░ UseGrpcWeb()рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ : Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    //    gRPC-Web     
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ gRPC- рд╡реЗрдм рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CORS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред

GRPC- рд╡реЗрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдирд┐рд░реНрджреЗрд╢


GRPC- рд╡реЗрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ  рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдкрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП gRPC- рд╡реЗрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ ред

.NET рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдирд┐рдпрдорд┐рдд gRPC рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЪреИрдирд▓ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред GRPC- рд╡реЗрдм рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Grpc.Net.Client.Web рдкреИрдХреЗрдЬ рдХрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ ред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ GrpcWebHandler:

//     gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

.NET рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ gRPC- рд╡реЗрдм рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝реЗрдВ, рдЬреЛ  Blazor WebAssembly рдореЗрдВ gRPC- рд╡реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ ред

рдЖрдЬ ASP.NET рдХреЛрд░ рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдЖрдЬрд╝рдорд╛рдПрдВ


NuGet рдкрд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдкреИрдХреЗрдЬ:

  • Grpc.AspNetCore.Web  - ASP.NET Core gRPC рдореЗрдВ gRPC- рд╡реЗрдм рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ред
  • Grpc.Net.Client.Web  - .NET рд╕реЗ gRPC- рд╡реЗрдм рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛

рдЖрдк рдпрд╣рд╛рдБ .NET рдХреЛрд░ рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ  ред

рдиреЛрдЯ: рдЬрдмрдХрд┐ .NET рдХреЗ рд▓рд┐рдП gRPC- рд╡реЗрдм рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рдпрд▓рдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдЙрддреНрдкрд╛рдж рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

Source: https://habr.com/ru/post/undefined/


All Articles