Можно ли использовать gRPC с HTTP / 1.1 в .NET Core?

У меня есть две сетевые службы - клиент gRPC и сервер gRPC. Сервер написан на .NET Core, следовательно, HTTP / 2 для gRPC обязателен. Однако клиент - это веб-приложение .NET Framework 4.7.2, размещенное на IIS 8.5, , поэтому он поддерживает только HTTP / 1.1.

Поскольку для обновления клиента потребуется некоторое время, я подумал, можно ли использовать HTTP / 1.1 вместо HTTP / 2 на стороне сервера, но я не могу найти никакой информации, как этого добиться.

Можно ли использовать HTTP / 1.1 для сервера gRPC, написанного на .NET Core? И если да, то как?


person GrayCat    schedule 16.01.2020    source источник


Ответы (2)


Нет, вы не можете использовать gRPC в HTTP 1.1; однако вы можете использовать реализацию транспорта Google Grpc.Core вместо управляемых битов Microsoft; это нацелено на .NET Standard 1.5 и .NET Standard 2.0, поэтому должно работать с .NET Core и использует неуправляемый двоичный файл для конкретной ОС (chttp2) для транспорта.

На стороне клиента между ними практически нет разницы; изменяется только фактическое создание канала, между:

GrpcChannel.ForAddress(...)

с транспортом Microsoft, и

new Channel(...)

с транспортом Google. Все остальные API являются общими (в Grpc.Core.Api)

person Marc Gravell    schedule 16.01.2020
comment
Если я использую новый канал транспорта Microsoft (...), то это должен быть HTTP / 1.1, а не HTTP / 2? Как я могу найти версию HTTP на подключенном канале gRPC? Спасибо - person Marco; 04.10.2020
comment
@ Марко, почему ты так думаешь? Совершенно уверен, что это http / 2, потому что gRPC определен как http / 2 - person Marc Gravell; 04.10.2020
comment
@Marco также, new Channel - это транспорт Google, а не MS, поэтому это chttp, на котором запущен http / 2 - person Marc Gravell; 04.10.2020
comment
Я просмотрел журналы GRPC, и там не было упоминания о HTTP / 2, только http. Но соединение действительно сохранилось, как и ожидалось от HTTP / 2. Спасибо - person Marco; 04.10.2020
comment
@marco fyi, если вам нужен транспорт MS: GrpcChannel.ForAddress(...) - person Marc Gravell; 04.10.2020

Нет. Вызов RPC выполняется только через HTTP / 2. Это позволяет пользователям gRPC автоматически использовать все функции протокола.

person WhoKnows    schedule 16.01.2020
comment
gRPC не использует каких-либо специфических функций HTTP2, которых нет в HTTP / 1.1 - трейлеры ответа поддерживаются в HTTP / 1.1 через фрагментированное кодирование, а клиентская потоковая передача поддерживается в HTTP / 1.1 также через фрагментированное кодирование (очень редко используемый HTTP / 1.1, но она есть). Это миф, что gRPC не работает с HTTP / 1.1. - person James Roper; 15.07.2021