Service Fabric - Remoting Listener和Communication Listener无法同时工作

时间:2017-05-19 10:44:31

标签: c# azure-service-fabric

我是Service Fabric的新手,在我的练习中,我做了一个可靠的无状态服务,在RunAsync中增加了他的属性“counter”。我验证了我可以通过接口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,则服务启动,我可以从侦听端口上的浏览器调用它。

我的问题是:不支持多个侦听器吗?我没有尝试过两个自定义监听器(在不同的端口上)。

1 个答案:

答案 0 :(得分:5)

支持多个侦听器,但您必须为侦听器提供名称,否则该名称是可选的。尝试在CreateServiceInstanceListeners

中为听众添加名称
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[]
    {
        new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context), "RemotingListener"),
        new ServiceInstanceListener(context => new CustomListener(), "CustomListenerName")
    };
}