我已经创建了Service Fabric应用程序,并且StatelessService.CreateServiceInstanceListeners
返回了多个ServiceInstanceListener
对象。服务侦听器已打开,但几乎立即中止。然后,它再次打开侦听器(不经过CreateServiceInstanceListeners
,中止它们,...
当我仅使用一个服务侦听器时,一切正常。
答案 0 :(得分:1)
将返回的服务实例侦听器添加到ServiceListenerInstanceCollection
([代码] [1])中,如果集合中已经存在具有相同名称的服务侦听器实例,则此操作将失败。
ServiceInstanceListener构造函数具有以下实现:
public ServiceInstanceListener(
Func<StatelessServiceContext, ICommunicationListener> createCommunicationListener,
string name = "")
{
this.CreateCommunicationListener = createCommunicationListener;
this.Name = name;
}
默认名称是一个空字符串,因此,如果您不指定名称,则返回的枚举包含多个名称为“”的侦听器,这将引发异常。默认实现将中止已打开的侦听器并重新启动它们。
解决方案很简单。创建ServiceInstanceListener
时只需指定一个(唯一的)名称。