【问题标题】:can i use two different kind of listener in service fabric service?我可以在服务结构服务中使用两种不同类型的侦听器吗?
【发布时间】:2017-03-07 00:03:05
【问题描述】:

我有一个无状态服务,我将其用作 websocket 服务器。为此,我正在使用 ICommunicationListener。我还想使用 ServiceProxy 调用此服务的方法。因此,我正在使用 ServiceRemotingListener。

internal sealed class Stateless : StatelessService, ICommunicationListener, IStatelessServiceInterface
{        
    public Stateless(StatelessServiceContext context)
        : base(context){ }      

    protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {           
        return new List<ServiceInstanceListener>()
        {
            new ServiceInstanceListener((context) =>this.CreateServiceRemotingListener(context)),
            new ServiceInstanceListener(_ => this)
        };
    }.....

因此,当我同时使用两个侦听器时,在诊断事件中运行应用程序后,我收到消息:socket is going to close.So websocket is not working.

所以我想知道我可以同时使用两种类型的监听器吗?或者我的问题有什么解决方案?

【问题讨论】:

  • 你能显示 OpenAsync 吗?套接字关闭的原因是否已知?防火墙配置了吗?您在 ServiceManifest 的 Endpoints 部分有什么?
  • 如果我不使用remotingListener,websocket 工作正常。
  • 请为问题本身添加更新。而且 OpenAsync 仍然很有趣。

标签: azure-service-fabric


【解决方案1】:

这是我的 OpenAsync:

public Task<string> OpenAsync(CancellationToken cancellationToken)
{
        EndpointResourceDescription serviceEndpoint = this.serviceContext.CodePackageActivationContext.GetEndpoint("ServiceEndpoint");
        int port = serviceEndpoint.Port;
        this.listeningAddress = string.Format(CultureInfo.InvariantCulture, "http://+:{0}/{1}{2}", port, this.appRoot, this.webSocketRoot);
        this.publishAddress = this.listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);

        this.Start();
        return Task.FromResult(this.publishAddress);
    }

【讨论】:

  • 那么,基本上,您为两个侦听器发布了相同的地址和端口?它不会那样工作。至少将具有不同名称和路径的第二个端点添加到第一个实例侦听器和第二个实例侦听器。或者只是更改 OpenAsync 代码中的端口。
  • 是的。我有另一个名称不同的端点。 。但我不明白你说的这个:“路径两个名称到第一个实例侦听器和第二个”
  • 只是打错了。我的意思是您需要将名称放入实例侦听器,以便每个侦听器都知道哪个端点属于它。顺便说一句,Remoting 的端点具有内部类型,而不是 Input 并使用 TCP。
  • 我不知道如何将端点名称放入实例侦听器。
  • Link 1。如果只有一个端点,则在创建实例侦听器时不指定端点名称,如果有多个端点,则必须指定。
猜你喜欢
  • 1970-01-01
  • 2017-11-10
  • 2018-03-16
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2013-12-09
  • 2017-11-08
  • 1970-01-01
相关资源
最近更新 更多