Перейти к содержанию

gRPC-web и ASP.NET Core 6

Реализация gRPC-web будет на удивление простой, если вы уже знакомы с gRPC для ASP.NET Core 6. Некоторые изменения будут необходимы в том, и только в том случае, если вашим клиентом будет браузер. Помните, браузеры не поддерживают клиентские и двунаправленные потоки, поэтому вам необходимо переделать proto-файлы так, чтобы они использовали только серверные потоки и унарные вызовы.
Но в чём смысл использовать gRPC-web, если ваш клиент не является браузером? В экосистеме .NET cуществует некоторое количество клиентских приложений, которые не поддерживают HTTP/2, и поэтому использовать HTTP/1 альтернативу gRPC (то есть gRPC-web) необходимо для следующих типов клиентов:

  • .NET Core 2;
  • .NET Framework;
  • Blazor WebAssembly;
  • Mono;
  • Xamarin.IOS и Android;
  • UWP;
  • Unity.

Помните, что gRPC-web может быть естественной альтернативой gRPC в случае, когда хостинг (например, Microsoft Azure) не полностью поддерживает HTTP/2.
Любое приложение, работающее под .NET Core 3 и выше, может использовать как gRPC, так и gRPC-web.

Важно!

Если ваш клиент не является HTML/JavaScript приложением, выполняющимся в браузере, либо десктопным приложением, основанном на ElectronJS, вы можете переконфигурировать приложение CountryService из главы 9 так, чтобы оно стало работать в режиме gRPC-web.

Сперва добавим к проекту CountryService.gRPC NuGet-пакет Grpc.AspNetCore.Web, например через Package Manager Console:

Install-Package Grpc.AspNetCore.Web

Далее, добавим соответствующую мидлварю
app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });

Настройка DefaultEnabled = true включает gRPC-web по умолчанию для любого настроенного gRPC-сервиса. Если же нет желания включать его по умолчанию, можно указать сервисы, для которых следует включить gRPC-web, явно:
app.UseGrpcWeb();
app.MapGrpcService<CountryGrpcService>().EnableGrpcWeb();

Собственно, это всё. Мы настроили gRPC-web для небраузерных клиентов.


Последнее обновление : 9 июля 2023 г.
Дата создания : 9 июля 2023 г.

Комментарии

Комментарии