我正在学习 SF,现在正在尝试构建无状态服务的控制台客户端。
尝试按照此处的说明进行操作:https://learn.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() 时出现异常。
知道如何解决这个问题吗?
最佳答案
不要忘记向您的服务添加通信监听器,如下所示:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
yield return new ServiceInstanceListener(ServiceRemotingExtensions.CreateServiceRemotingListener(this, Context));
}
注意:
调用CreateServiceRemotingListener
创建一个特定的communication listener只能在集群内部使用。因此,当从您的开发计算机与开发集群上运行的服务进行通信时,这将起作用。您不能像这样与在不同机器上运行的服务进行通信。
要从外部访问您的集群,您可以使用 ServiceBus , WCF或OWIN例如。 (或者你自己构建的东西)
关于c# - 控制台应用程序客户端到 Service Fabric 无状态服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40910141/