控制台应用程序客户端到服务结构无状态服务
问题描述:
我正在学习SF,并且正在尝试为无状态服务构建控制台客户端。控制台应用程序客户端到服务结构无状态服务
,并将此我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()时,我得到一个异常。
任何想法如何解决这个问题?
答
不要忘了通信监听器添加到您的服务是这样的:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
yield return new ServiceInstanceListener(ServiceRemotingExtensions.CreateServiceRemotingListener(this, Context));
}
注:
到CreateServiceRemotingListener
调用创建只有从内使用特定的communication listener簇。所以,当从你的开发机器谈到你的开发集群上运行的服务时,这将起作用。你不能与这样的不同机器上运行的服务交谈。
要从外部访问群集,可以使用ServiceBus,WCF或OWIN。 (或者你自己创建的东西)
好目的是创建一个真正简单的客户端(即控制台应用程序),它最终会导致SF Actors响应传入的消息。我认为创建无状态服务是“进入”群集中最简单的中继。创建REST-API服务并从客户端调用它会更容易吗?我只想通过一个简单的途径进入集群进行测试/学习。 –
是的,如果客户端可以在集群之外,则需要使用我提到的替代方法。根据您的要求,知识和偏好,任何都可以。 – LoekD