如何在Bond服务定义中实现功能?

时间:2017-09-03 10:41:33

标签: web-services bond

查看Bond Comm documentation,我不清楚我为服务定义的函数是如何连接到我的代码中的特定函数的。

它是否在项目中查找具有相同签名的函数并将其分配给端点?我缺少一些基础设置文件吗?

1 个答案:

答案 0 :(得分:1)

注意:Bond Comm已被弃用。它不再受支持,将在即将发布的版本中从Bond中删除。 Bond-over-gRPC是它的替代品。

当使用Bond-over-gRPC或Bond Comm时,生成的服务器端代码是一个抽象类,其中包含服务定义中每个方法的抽象方法。要为这些方法提供逻辑,请从生成的基础继承并提供所有服务方法的实现。然后,通常在主函数中,创建服务器(用于Bond-over-gRPC)或监听器(用于Bond Comm)并注册实现类的实例。这将IDL服务方法的路由设置为您的实现代码。

来自Bond-over-gRPC C# documentation

  

给出如下服务定义:

service Example
{
    ExampleResponse ExampleMethod(ExampleRequest);
}
     

gbc将使用--grpc标志为gRPC生成C#类:

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();
     

此时服务器已准备好接收请求并将它们路由到   服务实施。

还有更多例子:

值得指出的是(Bond-over-)gRPC和Bond Comm既不是SOAP也不是REST。这个问题用标记,有时人们在谈论Web服务时指的是SOAP / REST。我认为gRPC和Bond Comm都是TCP上的自定义二进制协议,尽管gRPC在HTTP / 2上运行。