Рады объявить об экспериментальной поддержке gRPC-Web с .NET. gRPC-Web позволяет вызывать gRPC из приложений на основе браузера, таких как JavaScript SPA или приложений Blazor WebAssembly.
gRPC-Web для .NET обещает привнести многие замечательные функции gRPC в приложения для браузеров:
Невозможно реализовать спецификацию 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 требует небольших затрат на производительность, и две функции gRPC больше не поддерживаются: клиентская потоковая передача и двусторонняя потоковая передача. (потоковая передача на сервер все еще поддерживается!)
Если вы еще не изучали gRPC в .NET, вот простой туториал, чтобы вы могли начать работу.
gRPC-Web не требует каких-либо изменений в ваших службах, единственная модификация — это начальная конфигурация. Чтобы включить gRPC-Web со службой ASP.NET Core gRPC, добавьте ссылку на пакет Grpc.AspNetCore.Web. Настройте приложение для использования gRPC-Web, добавив
Для вызова gRPC-Web из браузера может потребоваться дополнительная настройка, например, настройка приложения для поддержки CORS.
У клиента JavaScript gRPC-Web есть инструкции для настройки клиента gRPC-Web для использования в браузере JavaScript SPA.
Вызов gRPC-Web с клиентом .NET аналогичен обычному gRPC, единственное изменение — это способ создания канала. Чтобы включить gRPC-Web, добавьте ссылку на пакет Grpc.Net.Client.Web. Настройте канал для использования
Чтобы увидеть gRPC-Web с .NET в действии прочитайте крутой пост в блоге нашего коллеги, который использовал gRPC-Web в Blazor WebAssembly.
Preview-пакеты на NuGet:
Документацию по использованию gRPC-Web с .NET Core вы можете найти здесь.
Примечание: пока gRPC-Web для .NET является лишь экспериментальным проектом, не поддерживаемым продуктом.
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.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-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 является лишь экспериментальным проектом, не поддерживаемым продуктом.