【问题标题】:Console app client to Service Fabric Stateless Service控制台应用程序客户端到 Service Fabric 无状态服务
【发布时间】:2017-04-16 01:28:47
【问题描述】:

我正在学习 SF,现在正在尝试为无状态服务构建控制台客户端。

尝试按照此处的说明进行操作:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-connect-and-communicate-with-services

并将其添加到我的 StatelessService 类中

    public interface IMyService : IService
    {
        Task<string> HelloWorldAsync();
    }

还有一个简单的实现

    public Task<string> HelloWorldAsync()
    {
        return Task.FromResult("HELLO FROM SERVICE!");
    }

其余不变。

在我的控制台应用中,我有

IMyService helloWorldClient = ServiceProxy.Create<IMyService>(
   new Uri("fabric:/RestGateway/StatelessGateway1"));
string message = await helloWorldClient.HelloWorldAsync();

服务部署到我的本地集群并且似乎工作正常(绿色按钮),但在调用 helloWorldClient.HelloWorldAsync() 时出现异常。

知道如何解决这个问题吗?

【问题讨论】:

    标签: c# azure console azure-service-fabric stateless


    【解决方案1】:

    不要忘记像这样向您的服务添加通信侦听器:

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        yield return new ServiceInstanceListener(ServiceRemotingExtensions.CreateServiceRemotingListener(this, Context));
    }
    

    注意:

    CreateServiceRemotingListener 的调用会创建一个特定的communication listener,该communication listener 只能在集群内使用。因此,当从您的开发机器与在您的开发集群上运行的服务通信时,这将起作用。你不能像这样与在不同机器上运行的服务交谈。

    例如,要从外部访问您的集群,您可以使用ServiceBusWCFOWIN。 (或您自己构建的东西)

    【讨论】:

    • OK 目的是创建一个非常简单的客户端(即控制台应用程序),最终将导致 SF Actor 对传入的消息做出反应。我认为创建 StatelessService 是“进入”集群的最简单中继。创建 REST-API 服务并从客户端调用它会更简单吗?我只是想要一个简单的路径进入集群进行测试/学习。
    • 是的,如果客户端可以在集群之外,您将需要使用我提到的替代方式。根据您的要求、知识和偏好,任何人都可以。
    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 2023-03-25
    • 2016-11-16
    • 2017-07-03
    • 2017-05-02
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多