我正在学习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()时出现异常。
知道如何解决这个问题吗?
答案 0 :(得分:2)
不要忘记为您的服务添加通信监听器,如下所示:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
yield return new ServiceInstanceListener(ServiceRemotingExtensions.CreateServiceRemotingListener(this, Context));
}
注意:强>
对CreateServiceRemotingListener
的调用会创建一个只能在群集中使用的特定communication listener。因此,当从您的开发机器与在您的开发群集上运行的服务进行通信时,这将起作用。您无法与在不同机器上运行的服务进行通信。
要从外部访问群集,您可以使用ServiceBus,WCF或OWIN。 (或者你自己建造的东西)