无法在CreateServiceInstanceListeners中使用多个ServiceInstanceListener对象

时间:2019-04-09 18:18:00

标签: azure-service-fabric

我已经创建了Service Fabric应用程序,并且StatelessService.CreateServiceInstanceListeners返回了多个ServiceInstanceListener对象。服务侦听器已打开,但几乎立即中止。然后,它再次打开侦听器(不经过CreateServiceInstanceListeners,中止它们,...

当我仅使用一个服务侦听器时,一切正常。

1 个答案:

答案 0 :(得分:1)

将返回的服务实例侦听器添加到ServiceListenerInstanceCollection([代码] [1])中,如果集合中已经存在具有相同名称的服务侦听器实例,则此操作将失败。

ServiceInstanceListener构造函数具有以下实现:

public ServiceInstanceListener(
   Func<StatelessServiceContext, ICommunicationListener> createCommunicationListener,
   string name = "")
{
  this.CreateCommunicationListener = createCommunicationListener;
  this.Name = name;
}

默认名称是一个空字符串,因此,如果您不指定名称,则返回的枚举包含多个名称为“”的侦听器,这将引发异常。默认实现将中止已打开的侦听器并重新启动它们。

解决方案很简单。创建ServiceInstanceListener时只需指定一个(唯一的)名称。