Реализация Get Started туторила по protobuf-net.Grpc.
Этот пакет позволяет создавать сервисы и их контракты для коммуникации по gRPC используя подход code first ("в стиле" WCF). Субъективно, это гораздо удобнее для разработки внутренних систем, чем использование .proto
.
Нужно настроить сервис на поддержку HTTP/2. Для этого нужно немного переписать Program.cs. Я переписал по официальному примеру. Про метод расширения ConfigureKestrel читать здесь.
Метод Division проверяет аргументы. Если Y == 0, выбрасывает исключение RpcException с кодом 13 (InvalidArgument).
Нужно дополнительно установить пакет Grpc.Net.Client (конкретно в примере без него класс GrpcChannel не доступен).
Код вызова методов обёрнут в try/catch. Блок catch перехватывает ошибки RpcException для корректной обработки gRPC кодов ошибок.
Код по обработке ошибок добавлен на основе материалов:
- Официальный гайд Error Handling
- Официальный пример для C#
Пример я немного переписал. Чтобы не затирать заданные в конфигурации прослушиваемые адреса, использую опцию ConfigureEndpointDefaults:
kestrelOptions.ConfigureEndpointDefaults(x => x.Protocols = HttpProtocols.Http2);