gRPC-Web для .NET обещает привнести многие замечательные функции gRPC в приложения для браузеров:
- Строго-типизированные кодо-сгенерированные клиенты
- Компактные сообщения Protobuf
- Серверный стриминг
Что такое gRPC-Web
Невозможно реализовать спецификацию gRPC HTTP/2 в браузере, потому что нет API браузера с достаточным детальным контролем над HTTP-запросами. gRPC-Web решает эту проблему будучи совместимым с HTTP/1.1 и HTTP/2.
gRPC-Web не является новой технологией. Есть стабильный gRPC-Web JavaScript-клиент, а еще прокси для перевода между gRPC и gRPC-Web для сервисов. Новые экспериментальные пакеты позволяют приложению ASP.NET Core gRPC поддерживать gRPC-Web без прокси-сервера и позволяют клиенту .NET Core gRPC вызывать службы gRPC-Web. (отлично подходит для приложений Blazor WebAssembly!)
Новые возможности с gRPC-Web
- Вызов приложений ASP.NET Core gRPC из браузера — API браузера не могут вызывать gRPC HTTP/2. gRPC-Web предлагает совместимую альтернативу.
- JavaScript SPA
- Приложения .NET Blazor Web Assembly
- Размещать приложения ASP.NET Core gRPC в IIS и службе приложений Azure. Некоторые серверы, такие как IIS и служба приложений Azure, в настоящее время не могут размещать службы gRPC. В то время как над этим активно работают, gRPC-Web предлагает интересную альтернативу, которая сегодня работает в любой среде.
- Вызов gRPC с платформ, отличных от .NET Core. Некоторые платформы .NET
HttpClientне поддерживают HTTP/2. gRPC-Web может использоваться для вызова сервисов gRPC на этих платформах (например, Blazor WebAssembly, Xamarin).
Обратите внимание, что gRPC-Web требует небольших затрат на производительность, и две функции gRPC больше не поддерживаются: клиентская потоковая передача и двусторонняя потоковая передача. (потоковая передача на сервер все еще поддерживается!)
Серверные инструкции gRPC-Web
Если вы еще не изучали gRPC в .NET, вот простой туториал, чтобы вы могли начать работу.
gRPC-Web не требует каких-либо изменений в ваших службах, единственная модификация — это начальная конфигурация. Чтобы включить gRPC-Web со службой ASP.NET Core gRPC, добавьте ссылку на пакет Grpc.AspNetCore.Web. Настройте приложение для использования gRPC-Web, добавив 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-Web из браузера может потребоваться дополнительная настройка, например, настройка приложения для поддержки CORS.
Клиентские инструкции gRPC-Web
У клиента JavaScript gRPC-Web есть инструкции для настройки клиента gRPC-Web для использования в браузере JavaScript SPA.
Вызов gRPC-Web с клиентом .NET аналогичен обычному gRPC, единственное изменение — это способ создания канала. Чтобы включить gRPC-Web, добавьте ссылку на пакет 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" });
Чтобы увидеть gRPC-Web с .NET в действии прочитайте крутой пост в блоге нашего коллеги, который использовал gRPC-Web в Blazor WebAssembly.
Попробуйте gRPC-Web с ASP.NET Core сегодня
Preview-пакеты на NuGet:
- Grpc.AspNetCore.Web – Добавление поддержки gRPC-Web в ASP.NET Core gRPC.
- Grpc.Net.Client.Web – Вызов эндпоинтов gRPC-Web из .NET
Документацию по использованию gRPC-Web с .NET Core вы можете найти здесь.
Примечание: пока gRPC-Web для .NET является лишь экспериментальным проектом, не поддерживаемым продуктом.
ссылка на оригинал статьи https://habr.com/ru/company/microsoft/blog/487548/

Добавить комментарий