【问题标题】:Service Fabric - Remoting Listener and Communication Listener not working simultaneouslyService Fabric - 远程监听器和通信监听器不能同时工作
【发布时间】:2017-10-19 11:08:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# azure-service-fabric


    【解决方案1】:

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

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new[]
        {
            new ServiceInstanceListener(context => this.CreateServiceRemotingListener(context), "RemotingListener"),
            new ServiceInstanceListener(context => new CustomListener(), "CustomListenerName")
        };
    }
    

    【讨论】:

    • 太棒了!它解决了我的问题 :) 从 MSDN 文档中它不是很清楚!再问一个问题:这样我可以公开一个包含在同一个项目中的真实 WebAPI 还是将无状态服务项目与 WebAPI 项目分开更好?提前致谢!
    • 您可以在同一个服务中添加 WebAPI。您是否将其放在同一个服务中的决定取决于您的设计。请记住,您使用的是微服务架构。如果您的 WebAPI 只返回计数器,则应将其添加到同一服务(WebAPI 仅充当计数器的端点)。如果您的 WebAPI 有很多功能,其中之一是返回计数器,为其创建不同的服务并使用远程服务获取计数器(计数器是更大的一部分)。
    • 完全同意它不清楚,当我与多个听众一起演奏时,我也错过了这种过载!
    • @WouterB 在问题的上下文中 => “CustomListenerName”实际上应该是 ServiceInstanceListener 构造函数中的“SS1ServiceEndpoint”?
    猜你喜欢
    • 2013-12-24
    • 2013-07-12
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2021-07-02
    • 2021-12-04
    相关资源
    最近更新 更多