Использование клиента gRPC с .NET Standard 2.0
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 8 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 8 этой статьи.
Автор: Джеймс Ньютон-Кинг (James Newton-King)
В этой статье объясняется, как использовать клиент .NET gRPC с реализациями .NET, поддерживающими .NET Standard 2.0.
Реализации .NET
Следующие реализации .NET (или их более поздние версии) поддерживают Grpc.Net.Client, но не обеспечивают полную поддержку HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Android 8.0;
- универсальная платформа Windows 10.0.16299.
- Unity 2018.1.
Клиент .NET gRPC может вызывать службы из этих реализаций .NET, но для этого требуется дополнительная настройка.
Конфигурация HttpHandler
Поставщик HTTP следует настроить с помощью GrpcChannelOptions.HttpHandler
. Если обработчик не настроен, возникает ошибка:
System.PlatformNotSupportedException
: gRPC требует дополнительной настройки для успешного выполнения вызовов RPC в реализациях .NET, которые не поддерживают gRPC на основе HTTP/2. Поставщик HTTP должен быть указан с использованиемGrpcChannelOptions.HttpHandler
. Настроенный поставщик HTTP должен поддерживать HTTP/2 или быть настроен для использования gRPC-Web.
Реализации .NET, которые не поддерживают HTTP/2 (такие как UWP, Xamarin и Unity), в качестве альтернативы могут использовать gRPC-Web.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = new GrpcWebHandler(new HttpClientHandler())
});
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });
Клиенты также могут быть созданы с помощью фабрики клиента gRPC. Поставщик HTTP настраивается с помощью метода расширения ConfigurePrimaryHttpMessageHandler.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));
Дополнительные сведения см. в разделе Настройка gRPC-Web с помощью клиента .NET gRPC.
Внимание
Требуется, чтобы клиент и сервер поддерживали gRPC-Web. gRPC-Web можно быстро настроить на сервере ASP.NET Core gRPC. Для других реализаций сервера gRPC требуется прокси-сервер, чтобы обеспечить поддержку gRPC-Web.
.NET Framework
.NET Framework имеет ограниченную поддержку gRPC на основе HTTP/2. Чтобы включить gRPC на основе HTTP/2 в .NET Framework, настройте канал для использования WinHttpHandler.
Необходимые компоненты для использования WinHttpHandler
и ограничения:
- Windows 11 или более поздней версии, Windows Server 2019 или более поздней версии.
- Клиент gRPC полностью поддерживается в Windows 11 или более поздней версии.
- Клиент gRPC частично поддерживается в Windows Server 2019 и Windows Server 2022. Поддерживаются унарные и серверные методы потоковой передачи. Методы потоковой передачи клиента и двунаправленной потоковой передачи не поддерживаются.
- ссылка на пакет
System.Net.Http.WinHttpHandler
версии 6.0.1 или более поздней; - Настройте
WinHttpHandler
в канале с помощьюGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 или более поздней версии.
- поддерживаются только вызовы gRPC через TLS.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = new WinHttpHandler()
});
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });
gRPC C# core-library
В качестве альтернативы в .NET Framework и Xamarin для вызовов gRPC можно использовать библиотеку core-library gRPC C#. Библиотека core-library gRPC C#:
- Сторонняя библиотека, которая поддерживает выполнение вызовов gRPC по протоколу HTTP/2 в .NET Framework и Xamarin.
- Не поддерживается корпорацией Майкрософт.
- Находится в режиме обслуживания и перестанет использоваться; вместо нее будет использоваться gRPC для .NET.
- Не рекомендуется для новых приложений.
Дополнительные ресурсы
ASP.NET Core