我是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,则服务启动,我可以从侦听端口上的浏览器调用它。
我的问题是:不支持多个侦听器吗?我没有尝试过两个自定义监听器(在不同的端口上)。
答案 0 :(得分:5)
支持多个侦听器,但您必须为侦听器提供名称,否则该名称是可选的。尝试在CreateServiceInstanceListeners
。
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context), "RemotingListener"),
new ServiceInstanceListener(context => new CustomListener(), "CustomListenerName")
};
}