Как реализовать функции в определении услуг Bond?
Глядя на документацию Bond Comm, мне не было ясно, как функции, которые я определяю для сервисов, связаны с конкретными функциями в моем коде.
Ищет ли он функцию с такой же сигнатурой в проекте и назначает ее конечной точке? Есть ли какой-то основной файл настроек, который мне не хватает?
1 ответ
NB: Bond Comm устарела. Он больше не поддерживается и будет удален из Bond в следующем выпуске. Bond-over-gRPC является его заменой.
При использовании Bond-over-gRPC или Bond Comm сгенерированный серверный код является абстрактным классом с абстрактным методом для каждого метода в определении сервиса. Чтобы обеспечить свою логику для этих методов, вы наследуете от сгенерированной базы и предоставляете реализации для всех методов обслуживания. Затем, обычно в вашей основной функции, вы создаете сервер (для Bond-over-gRPC) или прослушиватель (для Bond Comm) и регистрируете экземпляр класса реализации. Это устанавливает маршрутизацию для метода сервиса IDL к вашему коду реализации.
Из документации Bond-over-gRPC C#:
Дано определение сервиса, подобное следующему:
service Example { ExampleResponse ExampleMethod(ExampleRequest); }
gbc сгенерирует классы C# для gRPC с флагом --grpc:
gbc c# --grpc example.bond
...
Чтобы создать функциональность службы, просто напишите конкретную реализацию службы, выделив подклассы серверной базы и предоставив бизнес-логику:
public class ExampleServiceImpl : Example.ExampleBase { public override async Task<IMessage<ExampleResponse>> ExampleMethod( IMessage<ExampleRequest> param, ServerCallContext context) { ExampleRequest request = param.Payload.Deserialize(); var response = new ExampleResponse(); // Service business logic goes here return Message.From(response); } }
Эта реализация сервиса подключается к серверу gRPC следующим образом:
var server = new Grpc.Core.Server { Services = { Example.BindService(new ExampleServiceImpl()) }, Ports = { new Grpc.Core.ServerPort(ExampleHost, ExamplePort, Grpc.Core.ServerCredentials.Insecure) } }; server.Start();
На этом этапе сервер готов принимать запросы и направлять их на реализацию сервиса.
Есть и другие примеры:
- автономный проект на C#
- пример пинга / понга на C#
- пример C++ "Hello World"
- пример пинг / понга на C++
Стоит отметить, что (Bond-over-) gRPC и Bond Comm не являются ни SOAP, ни REST. Вопрос был помечен веб-сервисом, и иногда люди имеют в виду SOAP/REST, когда говорят о веб-сервисах. Я думаю о gRPC и Bond Comm как о пользовательских двоичных протоколах через TCP, хотя gRPC выполняется поверх HTTP/2.