рд╣рдо .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 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо
HttpClient
HTTP / 2 рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред gRPC- рд╡реЗрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ gRPC рд╕реЗрд╡рд╛рдУрдВ (рдЬреИрд╕реЗ Blazor WebAssembly, Xamarin) рдкрд░ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ gRPC- рд╡реЗрдм рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрдо рд╣реИ рдФрд░ рджреЛ gRPC рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рджреЛ-рддрд░рдлрд╝рд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧред (рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ!)GRPC- рд╡реЗрдм рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджреЗрд╢
рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ .NET рдореЗрдВ gRPC рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЖрд░рдВрдн рдХрд░ рд╕рдХреЗрдВ редgRPC- рд╡реЗрдм рдХреЛ рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред ASP.NET рдХреЛрд░ gRPC рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде gRPC- рд╡реЗрдм рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХ рдХреЛ Grpc.AspNetCore.Web рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред GRPC- рд╡реЗрдм, рдЬреЛрдбрд╝рдиреЗ AddGrpcWeb(...)
рдФрд░ UseGrpcWeb()
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ : Startup.cspublic 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- рд╡реЗрдм рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рдпрд▓рдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдЙрддреНрдкрд╛рдж рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред