2016-12-01 132 views
1

我正在学习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()时,我得到一个异常。

任何想法如何解决这个问题?

回答

1

不要忘了通信监听器添加到您的服务是这样的:

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

注:

CreateServiceRemotingListener调用创建只有从内使用特定的communication listener簇。所以,当从你的开发机器谈到你的开发集群上运行的服务时,这将起作用。你不能与这样的不同机器上运行的服务交谈。

要从外部访问群集,可以使用ServiceBusWCFOWIN。 (或者你自己创建的东西)

+0

好目的是创建一个真正简单的客户端(即控制台应用程序),它最终会导致SF Actors响应传入的消息。我认为创建无状态服务是“进入”群集中最简单的中继。创建REST-API服务并从客户端调用它会更容易吗?我只想通过一个简单的途径进入集群进行测试/学习。 –

+0

是的,如果客户端可以在集群之外,则需要使用我提到的替代方法。根据您的要求,知识和偏好,任何都可以。 – LoekD

相关问题