我是 Service Fabric 的新手,在我的练习中,我做了一个可靠的无状态服务,在 RunAsync 中,它增加了他的属性“计数器”。我验证了我可以通过接口(interface) IService 公开一个返回此计数器值的方法(通过 ServiceProxy 从客户端调用的方法),显然会覆盖 CreateServiceInstanceListeners 并添加 CreateServiceRemotingListener。 然后我尝试添加另一个自定义通信监听器 SS1ServiceEndpoint(监听指定端口 7080):
<Endpoint Name="RemoteListener" />
<Endpoint Name="SS1ServiceEndpoint" Protocol="http" Port="7080" Type="Input" />
但服务最初抛出
Exception thrown: 'System.ArgumentException' in Microsoft.ServiceFabric.FabricTransport.dll
然后越来越多地调用自定义监听器的 OpenAsync 方法,每次调用后都会抛出另一个异常:
Exception thrown: 'System.ObjectDisposedException' in mscorlib.dll
Exception thrown: 'System.AggregateException' in mscorlib.dll
Exception thrown: 'System.Fabric.FabricElementAlreadyExistsException' in
System.Fabric.dll
Exception thrown: 'System.ArgumentException' in
Microsoft.ServiceFabric.FabricTransport.dll
如果我在 CreateServiceInstanceListeners 中删除 CreateServiceRemotingListener,该服务就会启动,我可以从浏览器的监听端口上调用它。
我的问题是:是否不支持多个监听器?我没有尝试使用两个自定义监听器(在不同的端口上)。
最佳答案
支持多个监听器,但您必须为监听器提供一个名称,否则该名称是可选的。尝试在 CreateServiceInstanceListeners
中为您的监听器添加一个名称。
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context), "RemotingListener"),
new ServiceInstanceListener(context => new CustomListener(), "CustomListenerName")
};
}
关于c# - Service Fabric - 远程监听器和通信监听器不同时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44068020/