Клиент Grpc в стандарте .net завершается ошибкой при вызове из .net framework, но не из .net core 3.1

#c# #grpc

Вопрос:

Это моя установка:

  • A: Стандартная версия .Net=2.0 (клиентская библиотека gRPC)
  • B: Версия .Net Framework=4.8 (веб — приложение- использует клиентскую библиотеку)
  • C: Версия .Net Core=3.1 (приложение WPF — использует клиентскую библиотеку)
  • D: Версия .Net Core=3.1 (сервер gRPC, мое собственное творение)
  • E: Версия .Net Core=3 или 5 — я не уверен. (Сервер gRPC, производство)

Ошибка = «Протокол HTTP/2 по протоколу TLS не был согласован на конечной точке, доступной только для HTTP/2».

Так… Кто-то другой реализовал этот сервер Grpc (E). Я могу позвонить этому с обоими приложениями. Никаких ошибок.

Но чтобы получить хорошую среду разработки для разработки двух приложений, я получил прото-файл с рабочего сервера и разработал свою собственную реализацию (D). Я использую это для тестирования обработки ошибок в клиентах — я могу контролировать, какие ответы дает сервер.

Я реализовал два совершенно одинаковых модульных теста, которые на самом деле являются интеграционными тестами. Один в проекте .net framework и один в проекте .net core.

И это работает для тестирования .net core, но не для .net framework.

Однако, если я введу a WinHttpHandler вместо HttpClientHandler , то это сработает. Я действительно не хочу вводить обработчик (это даже не интерфейс).

Также работает производственный сервер gRPC, как упоминалось ранее. Но я не знаю, почему мой выходит из строя, а производственный сервер gRPC работает.

Я думаю, что каким-то образом моя собственная реализация службы gRPC неверна (или отсутствует), но я не знаю, чего мне не хватает.

Пожалуйста, помогите!

Класс программы

Класс запуска